您的位置:首页 > 移动开发 > Android开发

Android 添加一个搜索功能

2016-07-29 21:39 399 查看
从android3.0以后,使用SearchView组件,可以在app bar添加一个搜索功能,你可以定义SearchView什么时候显示,什么时候不显示。

添加SearchView在App Bar上

首先你要新建一个 menu 文件,(所有要在bar中显示的,都必须建立一个menu文件)

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/search"
android:title="@string/search_title"
android:icon="@drawable/ic_search"
android:showAsAction="collapseActionView|ifRoom"
android:actionViewClass="android.widget.SearchView" />
</menu>


使用
collapseActionView
可以使你的 searchView 扩展到整个bar,在不使用的时候,又折叠刀普通的icon大小

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/search"
android:title="@string/search_title"
android:icon="@drawable/ic_search"
android:showAsAction="collapseActionView|ifRoom"
android:actionViewClass="android.widget.SearchView" />
</menu>


为了显示出来:

public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);

return true;
}


创建可搜索的配置

一个
searchable configuration
决定了 SearchView 的行为,是定义在
res/xml/searchable.xml
文件中的。

一个 searchable configuration 至少要有 android:lable 属性,同时我们也可以添加一个 hint 属性作为搜索框的提示信息

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint" />


在你的 清单文件 中,你得声明一个 指向
res/xml/searchable.xml
的元数据
<mata-data>
,你的app才知道如何找到这个文件

<activity ... >
...
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable" />

</activity>


onCreateOptionMenu()
方法中,会
setSearchableInfo(SearchableInfo)
方法来结合你的配置文件和你的SearchView

public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);

// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName())); // 这里使用 getComponentName(),是因为之前定义 searchable 文件的时候 lable 使用了 app_name

return true;
}


创建一个搜索Activity

当用户提交一个搜索请求的时候,你的需要一个Activity来处理这个搜索动作

<activity android:name=".SearchResultsActivity" ... >
...
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
...
</activity>


public class SearchResultsActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
...
handleIntent(getIntent());
}

@Override
protected void onNewIntent(Intent intent) {
...
handleIntent(intent);
}

private void handleIntent(Intent intent) {

if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
//use the query to search your data somehow
}
}
...
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android