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

Android开发之核心特性SearchView的开发使用(源代码分享)

2014-04-27 19:20 507 查看
      在Android上,搜索是一个核心用户特性。用户可以搜索可用的任何数据,不管内容是存促于设备本身或者需要通过网络访问。Android提供了一个搜索框架为用户创建一个一致的搜索体验,可以帮助你实现搜索应用程序。搜索框架提供两种搜索模式:一个搜索对话框(Search Dialog)位于搜索屏幕的顶部或窗口小部件(SearchView),可以将其嵌入到你的布局中。在这两种情况下,Android系统将帮助你搜索实现交付执行搜索的任务给一个特定的Activity。效果如下图所示。



       当用户需要执行一个搜索的搜索对话框或搜索小部件,系统创建一个Intent和存储用户Query,然后系统会启动你事先声明的用于执行数据查找的Activity,,使用它进行数据搜寻。总共需要以下三个步骤。
(1)建立一个Search.XML文件在res/xml文件中
     一个XML文件,配置一些search dialog或widget的设置。它包括设置特性,比如语音搜索,搜索建议和提示文本搜索框。

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


 (2)声明一个SearchActivity

          这个Activiy接收搜索用户的数据,并显示搜索结果。特别注意的是为了使调用的Activity找到这个SearchActivity,你必须首先声明Android搜索Activitydao到你的清单文件。如下所示。

<application ... >
<activity android:name=".SearchableActivity" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
...
</application>


  SearchActivity要完成以下三个步骤。1 接收查询 2 搜索您的数据3 展示结果。

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
handleIntent(getIntent());
}

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

private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
doMySearch(query);
}
}


     之前看博客又看到有人说onNewIntent()不知道几时促发的,我研究了下官方文档上面是这么写的。如果我们将android:launchMode设置为“singleTop”,然后SerachActivity接收ACTION_SEARCH intent 会调用 onNewIntent()方法。

(3)建立一个搜索界面
   搜索界面包含两种类型SearchDialog和SearchWidget。SerachDialog:默认情况下,搜索对话框隐藏,我们通过调用onSearchRequested()(当用户按搜索按钮)让他显示在屏幕上端,SearchWidget :允许用户将搜索框放在布局的任意位置,但通常需要跟actionbar结合。
  搜索界面的Activity也需要在清单文件声明

<activity android:name=".OtherActivity" ... >
<!-- enable the search dialog to send searches to SearchableActivity -->
<meta-data android:name="android.app.default_searchable"
android:value=".SearchableActivity" />
</activity>

public class OtherActivity extends Activity{
private Button mStartSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_invoke);
//就一个按钮
mStartSearch = (Button)findViewById(R.id.btn_start_search);
//启动搜索框
mStartSearch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onSearchRequested();
}
});
}

//重写onSearchRequested方法
@Override
public boolean onSearchRequested() {
//除了输入查询的值,还可额外绑定一些数据
Bundle appSearchData = new Bundle();
appSearchData.putString("demo_key","text");

startSearch(null, false, appSearchData, false);
//必须返回true。否则绑定的数据作废
return true;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息