Xamarin框架开发Android搜索框 Search Dialog实例

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,以便于您获取更多的相关知识。

时间: 2024-09-27 19:45:40

Xamarin框架开发Android搜索框 Search Dialog实例的相关文章

Android搜索框通用版_Android

之前项目总会遇到很多搜索框类的功能,虽然不是很复杂,不过每次都要去自己处理数据,并且去处理搜索框的变化,写起来也比较麻烦,今天来做一个比较简单的通用搜索栏. 先看下效果图: 没什么特别的,只是今天要做的就是简单的把搜索框的内容封装一下. 一.分析功能 先考虑一下,搜索框一般都是由一个搜索图标(一般都是一个放大镜),一个输入框和一个清除按钮组成.然后会通过监听输入框的变化去处理清除按钮的显示和隐藏并且去过滤相关的数据.最后去刷新适配器,显示过滤后的数据.基本上搜索框的功能都大同小异. 有了上边的分

Android顶部(toolbar)搜索框实现的实例详解

Android顶部(toolbar)搜索框实现的实例详解 本文介绍两种SearchView的使用情况,一种是输入框和搜索结果不在一个activity中,另一种是在一个activity中. 首先编写toolbar的布局文件 toolbar中图标在menu文件下定义一个布局文件实现 示例代码: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.

Android搜索框SearchView属性和用法详解

SearchView简介 SearchView是Android原生的搜索框控件,它提供了一个用户界面,用于用户搜索查询. SearchView默认是展示一个search的icon,点击icon展开搜索框,如果你想让搜索框默认就展开,可以通过setIconifiedByDefault(false);实现. SearchView属性 SearchView使用 xml中定义SearchView: <?xml version="1.0" encoding="utf-8"

Xamarin 中开发Android实现全屏或者不显示标题栏的方法-宋兴柱

原文:Xamarin 中开发Android实现全屏或者不显示标题栏的方法-宋兴柱 using System; using Android.App; using Android.Content; using Android.Runtime; using Android.Views; using Android.Widget; using Android.OS; namespace AndroidDemo { [Activity(Label = "Android", MainLaunche

Android开发之搜索框自动提示细节MatrixCursor学习

1,在ActionBar里面加入搜索框 在ActionBar里面加入搜索框是现在APP应用的常用做法.要想把搜索做好,可不是那么容易.涉及到自动提示和真正的搜索.下图是我对一个相对完整的搜索框涉及的元素关系做了一个图,箭头只表示它们之间有关系,不是类图中的继承. 一个Activity会有一个ActionBar,默认情况下.你可以在ActionBar里面添加菜单条目.菜单条目可以设置标题,图标以及关联的ActionView,这里我们关联了一个SearchView.SearchView和Search

Android搜索框组件SearchView的基本使用方法_Android

SearchView是android系统中内置的一个搜索框组件,可以很方便在添加在用户界面之上,但是也带来了一些问题,那就是searchview的UI是固定的,定制起来会很麻烦,如果对SearchView的要求比较高,完全可以采用button和EditText自己实现.这里先简单的说说SearchView的使用: main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" x

Android搜索框通用版

之前项目总会遇到很多搜索框类的功能,虽然不是很复杂,不过每次都要去自己处理数据,并且去处理搜索框的变化,写起来也比较麻烦,今天来做一个比较简单的通用搜索栏. 先看下效果图: 没什么特别的,只是今天要做的就是简单的把搜索框的内容封装一下. 一.分析功能 先考虑一下,搜索框一般都是由一个搜索图标(一般都是一个放大镜),一个输入框和一个清除按钮组成.然后会通过监听输入框的变化去处理清除按钮的显示和隐藏并且去过滤相关的数据.最后去刷新适配器,显示过滤后的数据.基本上搜索框的功能都大同小异. 有了上边的分

android搜索框上下滑动变色效果_Android

搜索框上下滑动变透明度是现在APP中很常见的效果,先看看效果: 首先来看下布局骨架: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height

Android搜索框组件SearchView的基本使用方法

SearchView是android系统中内置的一个搜索框组件,可以很方便在添加在用户界面之上,但是也带来了一些问题,那就是searchview的UI是固定的,定制起来会很麻烦,如果对SearchView的要求比较高,完全可以采用button和EditText自己实现.这里先简单的说说SearchView的使用: main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" x