在我的支持工具栏中尝试获得支持SearchView以便正常工作(显示,显示提示文本但拒绝接受文本)数小时后,我必须转向您。
我已经谷歌搜索了几个小时,在这里和其他网站上阅读了很多答案,检查了很多文档和一个处理该主题的特定博客文章,但我无法隔离这个问题。
正如我所说,我使用的是SearchView和Toolbar以及MenuItemCompat的支持版本。另外,ActionBarActivity。我确保我虔诚地遵循了所有步骤(this blog post在这个问题上有很多话要说,甚至在官方文件中都有错误)。
我已经正确设置了AndroidManifest.xml文件,我有一个searchable.xml,据我所知,正确引用(我的意思是,提示文本通常出现在SearchView字段中),我有一个搜索在清单中设置android.intent.action.SEARCH意图过滤器的结果活动。
仍然没有。老实说我真的很难过。
这是SearchView托管活动的onCreateOptionsMenu():
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
MenuItem search = menu.findItem(R.id.search);
searchView = (SearchView) MenuItemCompat.getActionView(search);
SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
return true;
}
这是res / xml中的searchable.xml:
<?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_title" >
</searchable>
最后,这是res / menu中的menu.xml文件:
<item
android:id="@+id/search"
android:icon="@drawable/ic_search_white_18dp"
android:title="@string/search_title"
myappname:actionViewClass="android.support.v7.widget.SearchView"
myappname:showAsAction="ifRoom|collapseActionView"/>
(显然myappname在这里替换了我的真实应用名称。)
奇怪的是,添加
后,语音搜索工作正常android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
答案 0 :(得分:2)
在浪费了8个小时之后,我想出了一个解决方案。我不确定它有多少黑客但它有效。
我注意到,就聚焦而言,SearchView中的EditText行为不规律:它没有光标,奇怪的是,当我拉下通知抽屉时,它似乎改变了焦点。我决定采用的理论是问题是SearchView内部EditText的重点,所以我去寻找EditText的android.R.id。
搜索之后,我遇到了this answer。所以我在SearchView中引用了EditText:
EditText searchField = (EditText)
searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
然后我请求焦点为EditText:
searchField.requestFocus();
...突然,SearchView可以接受文本,所有相关的回调都在工作!
我只剩下一个问题:当调用onPause()时,我的解决方案因EditText失去焦点而停止工作。所以我刚补充说:
invalidateOptionsMenu();
...在onResume()中,现在它完美无缺。
我必须说,但是,这是一个非常奇怪的经历,因为我虔诚地遵循了这些步骤(不是在官方的Android开发者指南中,它有很多错误)并且仍然无法使SearchView EditText成为焦点。我怀疑导航抽屉是否关注活动的创建,也许这就是问题的根源,但我还不确定。