SearchView

概述

        SearchView只能使用在api11往上,但是在兼容actionbar的v7包中,也有一个SearchView,可以兼容低版本的api。它是用来执行搜索功能的。它可以放在任何一个地方,包括布局中,但一般常用是放在actionbar上。

        当用户执行搜索时,系统会生成一个Intent对象,并将用户输入的内容存储在Intent对象中。然后系统会启动用户定义的searchable activity,并且将intent对象传递到该activity中。在此之前,我们需要定义一个searchable configuration和searchable activity。

searchable configuration

        该文件的名称通常是searchable.xml,并且一定要保存在res/xml文件夹中,且必须是<searchable>做为根节点。例如:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="@string/search_hint"
    android:label="@string/search_label" >

</searchable>
        其中label是唯一一个必须指定的属性,并且它指向了一个字符串资源。要注意的是:不能将字符串直接定义在该文件中,必须通过@string进行引用

searchable activity

        searchable activity是应用中接收搜索文字,并展示搜索结果的activity。当用户点击搜索时,系统启动的便是searchable activity,并且传递一个action为ACTION_SEARCH的intent对象,同时将用户输入的搜索文字通过SearchManager.QUERY键名带到searchable activity中。只需要在清单文件中添加以下代码即可:
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        <meta-data>必须包含值为android.app.searchable的android:name属性,同时android:resource指向配置的searchable configuration。
        要注意的是,这里面的<intent-filter>不需要指定值为DEFAULT的category属性,因为系统在启动searchable activity时用的是组件名(component name)。

接收搜索信息

        在清单文件中配置了searchable activity后,就可以在该activity中接收用户输入的搜索文字了。代码如下:
		Intent intent = getIntent();
		//首先判断该action是不是搜索
		if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
			//从Intent中获取用户输入的搜索文字
			String query = intent.getStringExtra(SearchManager.QUERY);
			System.out.println(query);//得到搜索文字后就可以进行搜索了
		}

配置SearchView

        在使用SearchView之前,需要将SearchView与searchable configuration进行关联。具体过程如下:首先找到SearchView对象;其次找到搜索配置信息,即SearchableInfo对象;调用SearchView.setSearchableInfo(),并将搜索配置信息传递进去。具体示例如下:
		// 本例中是在actionbar中使用searchview
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.main, menu);
		MenuItem item = menu.findItem(R.id.action_search);
		SearchView sv = (SearchView) item.getActionView();//得到SearchView对象
		SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
		sv.setSearchableInfo(manager.getSearchableInfo(getComponentName()));//获取搜索配置信息,并设置







你可能感兴趣的:(SearchView)