android – 如果用户按下设备的搜索按钮,则在ActionBar中显示SearchWidget

android – 如果用户按下设备的搜索按钮,则在ActionBar中显示SearchWidget,第1张

概述我按照 Android API Guide中的描述设置了一个SearchWidget.它在Action Bar中正确显示一个放大镜图标,如果我点击它,它会在Action Bar(一个深色背景的输入字段)中启动搜索小部件. 但是,如果我按下虚拟设备的搜索按钮,则会启动另一个搜索字段:它具有白色背景,并且不会调用我指定的回调方法. 所以我把它添加到我的MainActivity类: public boo 我按照 Android API Guide中的描述设置了一个SearchWidget.它在Action bar中正确显示一个放大镜图标,如果我点击它,它会在Action bar(一个深色背景的输入字段)中启动搜索小部件.

但是,如果我按下虚拟设备的搜索按钮,则会启动另一个搜索字段:它具有白色背景,并且不会调用我指定的回调方法.

所以我把它添加到我的MainActivity类:

public boolean onSearchRequested() {    SearchVIEw searchVIEw = (SearchVIEw) menu.findItem(R.ID.menu_search).getActionVIEw();    searchVIEw.setIconifIEd(!searchVIEw.isIconifIEd());    return false;}

搜索小部件的设置与文档中描述的完全相同:

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);searchVIEw.setonqueryTextListener(new CustomSearchqueryTextListener());

我的searchable.xml:

<?xml version="1.0" enCoding="utf-8"?><searchable xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:label="@string/app_name"></searchable>

和AndroIDManifest.xml:

<activity        androID:name="MainActivity"        androID:label="@string/app_name"        androID:launchMode="singleTask"        androID:uiOptions="splitactionbarWhenNarrow" >        <intent-filter>            <action androID:name="androID.intent.action.MAIN" />            <category androID:name="androID.intent.category.LAUNCHER" />        </intent-filter>        <intent-filter>            <action androID:name="androID.intent.action.SEARCH" />        </intent-filter>        <Meta-data androID:name="androID.app.searchable" androID:resource="@xml/searchable"/>    </activity>

我尝试使用setIconfIEd()方法的原因是,在AndroID API指南中,它说“切换搜索框可见性的能力”:

“By default,the search Widget is “iconifIEd,” meaning that it is
represented only by a search icon (a magnifying glass),and expands to
show the search Box when the user touches it. As shown above,you can
show the search Box by default,by calling
setIconifIEdByDefault(false). You can also toggle the search Widget
appearance by calling setIconifIEd().”

我也尝试调用startSearch(“”,false,null,false);但这会带来与白色背景相同的搜索字段.

所以我的问题是:如果用户按下设备的搜索按钮,是否可以在 *** 作栏中启动搜索小部件,即执行与单击搜索菜单项完全相同的 *** 作?

解决方法 在写这个问题时,我自己提出了解决方案.我仍然决定将它与答案一起发布,因为之前似乎没有问过这个问题,也许有人遇到同样的问题和/或提出了更好的解决方案.

您需要做的就是在搜索菜单项上调用expandActionVIEw(),一切都按预期工作:

public boolean onSearchRequested() {    menu.findItem(R.ID.menu_search).expandActionVIEw();    return true;}
总结

以上是内存溢出为你收集整理的android – 如果用户按下设备的搜索按钮,则在ActionBar中显示SearchWidget全部内容,希望文章能够帮你解决android – 如果用户按下设备的搜索按钮,则在ActionBar中显示SearchWidget所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1138828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存