Searchable之五(使用Search Widget)

来源:互联网 发布:拉瓦锡之死 知乎 编辑:程序博客网 时间:2024/04/28 10:42
九、使用Search Widget

Android 3.0 或更高版本中,可以使用 SearchView widget.如果你开发的程序是基于Anroid3.0且计划使用search widget, 那么我们建议把search widget 作为一个an action view in the Action Bar来使用, 而不是使用search dialog (也不要把search widget 放在你的activity layout中). 比如, 图二 就是把search widget 当做Action Bar来使用的一个界面.

search widget提供了和search dialog一样的功能. 当用户执行搜索的时候,它会启动合适的activity来进行处理,它也提供搜索关键词建议和语言搜索.

注意当你把search widget作为action view来使用时, 你可能有时仍然需要使用search dialog, 比如有时search widgAction Bar中也不太合适. 具体的请参照下面的”同时使用search widget和search dialog

图二

Searchable之五(使用Search Widget) - hubingforever - 民主与科学


 十、配置 search widget

首先你应该向前面讲的search dialog一样,先创建好searchable配置和searchable activity,然后为每个SearchView设置好搜索助手。你可以通过setSearchableInfo()来设置你的SearchableInfo 对象,SearchableInfo它代表的是你的searchable配置。

你可以同过SearchManager的 getSearchableInfo() 来得到 一个SearchableInfo的引用。

比如, 如果你想在Action Bar中把SearchView 作为一个action view来使用,那么在 回调数onCreateOptionsMenu() 中就应该enable the widget 实例10:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
   
// Inflate the options menu from XML
   
MenuInflater inflater = getMenuInflater();
    inflater
.inflate(R.menu.options_menu, menu);

   
// Get the SearchView and set the searchable configuration
   
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
   
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchView
.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView
.setIconifiedByDefault(false);
// Do not iconify the widget; expand it by default、
   
return true;
}
这样就完了,search widget现在已经被配置好了,系统也能够把搜索命令发送到你的searchable activity. 你也可以在 search widget中使用search suggestions。
注意: 如果你想自己处理所有用户的输入,请在它的回调函数和事件监听接口方法中处理。关于SearchView 和其监听接口,更多的内容可以参照SearchView的文档。
关于Action Bar中action views的更多内容,请参照Using the Action Bar (里面有把search widget作为action view来进行添加的实例代码)
十一、search widget的其他特性
可以向SearchView 添加一些其他的特性
A、提交按钮(A submit button)
默认情况下是没提交搜索的按钮,所以用户必须在键盘上按下"Return"键来提交搜索.你可以同过setSubmitButtonEnabled(true)来添加一个提交按钮("submit" button)
注:这里 的"Return"键应该就是”Enter“
B、自定义search suggestions
 当你使用search suggestions的时候, 你经常希望用户仅仅是简单选择suggestion, 但是他们也可能想自定义suggested search query. 你可以通过调用setQueryRefinementEnabled(true),来为每个suggestion添加一个按钮,让用户在search box中输入用户自定义的suggestion
C、让 search box 可以见
 默认情况下, search widget是"iconified“的,只是用一个图标 来表示它(一个放大镜), 当用户按下它的时候才显示search box . 你可以调用setIconifiedByDefault(false)让search box默认都被显示。 你也可以调用setIconified()让它以iconified“的形式显示。

SearchView 中还有其他的一些API允许你个性化search widget的显示.然而他们大多数是在你自己处理用户输入而不Android system处理输入和显示search suggestions时使用

十二、同时使用search widget和search dialog
如果你把search widget作为action view而插入到Action Bar中, 那么你可以让它只在有足够空间时才以Action Bar的形式出现(通过设置android:showAsAction="ifRoom"), 这时search widget就可能不以action view的形式出现, 而是是以菜单的形式出现在overflow menu里. 比如你的程序运行在一个小屏幕的手机上,在 Action Bar中就没有足够的空间把search widget和其他的action items or navigation elements显示下。这时它们将以菜单项的形式出现在overflow menu中. 当在overflow menu中显示的时候,该项像普通的菜单项一样 and 它不再显示 action view (the search widget).
为了处理该情况,当用户选择了和search widget关联的menu item时,你必须激活search dialog。为了处理此事情, 你必须在onOptionsItemSelected() h处理该"Search" menu item并通过调用onSearchRequested()来开启search dialog。

关于Action Bar如何工作和处理此中情况的更多信息请参照文档Using the ActionBar。也可以参照search dialog 和search widget的实例Searchable Dictionary
原创粉丝点击