Android 的搜索有两种可用方式:Search Dialog,SearchView。
SearchView 简单,随意使用,这里主要说说 Search Dialog 的基本用法, 因为 Xamarin 的处理方式稍稍和 原生 Android 有些不同。
效果:
Searchable
要使用 Search Dialog 需要配置一个搜索配置文件 : 放到Resources/xml 目录下 。
如果xml 目录不存在,需要手动创建一个。
文件名随便, 一般取 searchable.xml
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/SearchLabel"
android:hint="@string/SearchPlaceHolder"
>
</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 文件。
如下 :
<activity android:name="Search" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
</activity>
<activity android:name=".MainActivity" >
<meta-data android:name="android.app.default_searchable"
android:value=".Search" />
</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
[MetaData("android.app.searchable", Resource = "@xml/searchable")]
[IntentFilter(new[] { Intent.ActionSearch })]
[Activity(Label = "SearchActivity", Name = "aA.SearchA")] // aA.SearchA , aA为包名, 必须为小写字母开头
public class SearchActivity : Activity {
protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
if (this.Intent.Action.Equals(Intent.ActionSearch)) {
var query = this.Intent.GetStringExtra(SearchManager.Query);
Toast.MakeText(this, query, ToastLength.Short);
}
}
}
2,在要使用 Search Dialog 的 Activity 上这样写:
[MetaData("android.app.default_searchable", Value = "aA.SearchA")]
[Activity(Label = "Search", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity {
其中 SearchActivity 上的 Activity 必须指定 Name, 而且必须是 xxx.xxx.xxx 的结构,如果只写 xxx , 编译会报错:缺少 package 名称。
开发Android搜索框 Search Dialog实例-xamarin alertdialog">
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 处理, 像这样:
编译后, 可以查看 obj\Debug\android\AndroidManifest.xml 的最终结果。
如何获取输入搜索内容
要使用 Search Dialog 可见,需要在启用了 Search Dialog 的 Activity 上触发:onSearchRequested 方法。
private void Btn_Click(object sender, EventArgs e) {
this.OnSearchRequested();
}
有些 Android 机, 会自带一个 搜索按钮, 点这个按钮,也是一样会调用这个 OnSearchRequested.
当用户执行搜索的时候,系统会创建一个 Intent 存储用户的查询。
在 SearchActivity 中,
if (this.Intent.Action.Equals(Intent.ActionSearch)) {
var query = this.Intent.GetStringExtra(SearchManager.Query);
Toast.MakeText(this, query, ToastLength.Short);
}
如果想传递额外的参数到 SearchActivity, 可以这样传递:
public override bool OnSearchRequested() {
var bundle = new Bundle();
bundle.PutBoolean("Key1", true);
this.StartSearch(null, false, bundle, false);
return true;
}
获取额外参数可以这样:
var bundle = intent.GetBundleExtra(SearchManager.AppData);
if (bundle != null) {
var key1 = bundle.GetBoolean("Key1");
var key2 = bundle.GetBoolean("Key2");
}
Android搜索框架开发
Android是google的产品,所以自然是少不了搜索。先看看Android一些应用中的搜索对话框。
图1 Android中的全局搜索
图2 联系人搜索
图3 音乐搜索
以上都是通过按下实体键盘上的搜索按钮弹出的一个搜索对话框,当然搜索关键词提示是少不了的。如何实现呢?慢慢来!呵呵。
一、配置搜索描述文件
在res中的xml文件加创建sreachable.xml,内容如下:
<searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/search_label" android:hint="@string/search_hint" android:searchSettingsDescription="@string/settings_description">
二、创建SearchableMusicActivity.java
至少需要实现onCreate方法显示出来吧。
三、配置AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.halzhang.android.search" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".SearchableMusicActivity" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <!-- 配置action --> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <!-- 指定搜索的配置文件 --> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity> <meta-data android:name="android.app.default_searchable" android:value=".SearchableMusicActivity" />
通过以上三步就能实现搜索对话框了。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, 文件
, 搜索
, dialog
, this
配置
xamarin alertdialog、xamarin dialog、xamarin popup dialog、xamarin 实例、easyui dialog search,以便于您获取更多的相关知识。