Xamarin Android 的搜索框 : Search Dialog

Android 的搜索有两种可用方式:

Search Dialog
它是一个 UI Component , 被激活的时候, 会在顶部显示一个浮动的搜索框。

SearchView 

可以被布局到任何地方。在 Android 3.0 (Level 11) 中提供。

SearchView 简单,随意使用,这里主要说说 Search Dialog  的基本用法, 因为 Xamarin 的处理方式稍稍和 原生 Android 有些不同。

效果:

源码:

https://github.com/gruan01/Xamarin-Example/tree/master/Search

Searchable

要使用 Search Dialog 需要配置一个搜索配置文件 : 放到Resources/xml 目录下 。

如果xml 目录不存在,需要手动创建一个。

文件名随便, 一般取 searchable.xml

1 <?xml version="1.0" encoding="utf-8"?>
2 <searchable xmlns:android="http://schemas.android.com/apk/res/android"
3     android:label="@string/SearchLabel"
4     android:hint="@string/SearchPlaceHolder"
5     >
6 </searchable>

根节点 必须是 searchable 。

android:label 是必填项

android:hint 就是 html5 中的 placeholder

其它属选项请参考:

http://developer.android.com/guide/topics/search/searchable-config.html

?Activity 启用 Search Diaog 功能

要启用 Search Dialog , 还必须在 Activity 上开启搜索

在原生的 Android App 里可以直接修改 manifest 文件。

如下 :

 1     <activity android:name="Search" >
 2       <intent-filter>
 3         <action android:name="android.intent.action.SEARCH" />
 4       </intent-filter>
 5       <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
 6     </activity>
 7
 8     <activity android:name=".MainActivity" >
 9       <meta-data android:name="android.app.default_searchable"
10                  android:value=".Search" />
11     </activity>

android:resource="@xml/searchable" 即指上面的配置文件 (xml/searchable.xml)

黄色标注出来的,为固定字符串。

这一部分可以参考:

http://developer.android.com/guide/topics/search/search-dialog.html

在 Xamarin 下, manifest 文件即 properties 下面的 AndroidManifest.xml

该文件由 Xamarin 自行维护, 不推荐直接修改。

要开启 Activity 的搜索, 可以这样:

?1, 新建一个 SearchActivity

 1     [MetaData("android.app.searchable", Resource = "@xml/searchable")]
 2     [IntentFilter(new[] { Intent.ActionSearch })]
 3     [Activity(Label = "SearchActivity", Name = "aA.SearchA")] // aA.SearchA , aA为包名, 必须为小写字母开头
 4     public class SearchActivity : Activity {
 5         protected override void OnCreate(Bundle bundle) {
 6             base.OnCreate(bundle);
 7
 8
 9             if (this.Intent.Action.Equals(Intent.ActionSearch)) {
10                 var query = this.Intent.GetStringExtra(SearchManager.Query);
11                 Toast.MakeText(this, query, ToastLength.Short);
12             }
13         }
14     }

2,在要使用 Search Dialog 的 Activity 上这样写:

1     [MetaData("android.app.default_searchable", Value = "aA.SearchA")]
2     [Activity(Label = "Search", MainLauncher = true, Icon = "@drawable/icon")]
3     public class MainActivity : Activity {

其中 SearchActivity 上的 Activity 必须指定 Name, 而且必须是 xxx.xxx.xxx  的结构,如果只写 xxx , 编译会报错:缺少 package 名称。

package 名称必须以小写字母开头, 否则打包的时会报错:

在需要使用 Search Dialog 的 Activity 上 (上面示例中的的 MainActivity)的 MetaData 中指定 Value 为 SearchActivity 的 Name (aA.SearchA)

费这个劲加这个 Name 是因为 :

http://developer.xamarin.com/guides/android/advanced_topics/working_with_androidmanifest.xml/

Activity Name

Beginning with Xamarin.Android 5.1, the type name of an activity is based on the MD5SUM of the assembly-qualified name of the type being exported. This allows the same fully-qualified name to be provided from two different assemblies and not get a packaging error. (Before Xamarin.Android 5.1, the default type name of the activity was created from the lowercased namespace and the class name.)

If you wish to override this default and explicitly specify the name of your activity, use the Name property:

在 Xamarin.Android 5.1 以后, activity 的名字?会被 MD5SUM 处理, 像这样:

<activity android:icon="@drawable/icon" android:label="Search" android:name="md54b7a0ef5c9d7075d66a4a3ca71919313.MainActivity">?

编译后, 可以查看 obj\Debug\android\AndroidManifest.xml  的最终结果。

如何获取输入搜索内容

要使用 Search Dialog 可见,需要在启用了 Search Dialog 的 Activity 上触发:onSearchRequested 方法。

1         private void Btn_Click(object sender, EventArgs e) {
2             this.OnSearchRequested();
3         }

有些 Android 机, 会自带一个 搜索按钮, 点这个按钮,也是一样会调用这个 OnSearchRequested.

当用户执行搜索的时候,系统会创建一个 Intent 存储用户的查询。

在 SearchActivity 中,

1             if (this.Intent.Action.Equals(Intent.ActionSearch)) {
2                 var query = this.Intent.GetStringExtra(SearchManager.Query);
3                 Toast.MakeText(this, query, ToastLength.Short);
4             }

如果想传递额外的参数到 SearchActivity, 可以这样传递:

1         public override bool OnSearchRequested() {
2             var bundle = new Bundle();
3             bundle.PutBoolean("Key1", true);
4             this.StartSearch(null, false, bundle, false);
5             return true;
6         }

获取额外参数可以这样:

1                 var bundle = intent.GetBundleExtra(SearchManager.AppData);
2                 if (bundle != null) {
3                     var key1 = bundle.GetBoolean("Key1");
4                     var key2 = bundle.GetBoolean("Key2");
5                 }

-------------

OK, 完

谢谢围观

时间: 2024-10-13 00:57:40

Xamarin Android 的搜索框 : Search Dialog的相关文章

Xamarin.Android 制作搜索框

前段时间仿QQ做了一个搜索框样式,个人认为还不错,留在这里给大家做个参考,希望能帮助到有需要的人. 首先上截图(图1:项目中的样式,图2:demo样式): 不多说直接上代码: Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" androi

【起航计划 032】2015 起航计划 Android APIDemo的魔鬼步伐 31 App-&gt;Search-&gt;Invoke Search 搜索功能 Search Dialog SearchView SearchRecentSuggestions

Search (搜索)是Android平台的一个核心功能之一,用户可以在手机搜索在线的或是本地的信息.Android平台为所有需要提供搜索或是查询功能的应用提 供了一个统一的Search Framework来帮助实现Search功能.Search Framework的UI可以有两种形式: 屏幕顶部的Search Dialog:如Google Map提供的搜索条. 可以嵌到ContentView中的SearchView,应用可以将它放在屏幕上任何地方. 不管采用那种UI,Android系统都可以通

Android actionbar 搜索框

就是实现在顶部这样的搜索框. 一.这个搜索框是actionbar上的menu上的一个item.叫SearchView.我们可以先在menu选项里定义好: bmap_menu.xml: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item androi

android浮动搜索框

android浮动搜索框的配置比较繁琐,需要配置好xml文件才能实现onSearchRequest()方法. 1.配置搜索的XML配置文件?,新建文件searchable.xml,保存在res/xml文件夹中. 1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <searchable android:label="@string/search_label" 4 android:search

Android学习笔记_79_ Android 使用 搜索框

1.在资源文件夹下创建xml文件夹,并创建一个searchable.xml: <?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/sms_search" android:hint="@st

Android实现搜索框内自动完成文本框

Android实现搜索框内自动完成文本框 xml文件代码如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:orientation="vertical" 5 android:layout_width=

android浮动搜索框的使用

引言 在我们的应用程序中经常需要提供搜索服务,比如搜索联系人, 搜索商品信息等等.我们可以自己在布局中自定义我们的搜索框,实现我们的搜索逻辑.但是还有一种更简单的方法:使用android系统给我们提供的搜索功能框架. 在android中,提供两种实现搜索功能的方式:search dialog 和 searchView. search dialog类似于普通的dialog,悬浮于我们的窗体之上.示例图如下: searchView通常被嵌套在我们的布局之中,最典型的案例就是在actionBar中使用

Android自定义搜索框

搜索框里的虚拟键盘 xml如下 <EditText android:id="@+id/et_shopshow_search" android:layout_width="144dp" android:layout_height="40dp" android:singleLine="true" android:paddingLeft="8dp" android:paddingRight="8d

Android的搜索框SearchView的用法-android学习之旅(三十九)

SearchView简介 SearchView是搜索框组件,他可以让用户搜索文字,然后显示.' 代码示例 这个示例加了衣蛾ListView用于为SearchView增加自动补全的功能. package peng.liu.test; import android.app.Activity; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; impor