经过几个小时试图在我的支持工具栏中获得支持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:
android:hint="@string/search_hint"
android:label="@string/search_title" >
最后,这是res / menu中的menu.xml文件:
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"
在searchable.xml中.它甚至将意图中的已识别短语发送到搜索结果活动.唯一的问题是我根本无法在文本字段中输入文本 – 甚至没有光标在那里闪烁.尝试执行searchView.requestFocus()之类的操作没有结果.
解决方法:
在浪费了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成为焦点.我怀疑导航抽屉是否关注活动的创建,也许这是问题的根源,但我还不确定.
标签:java,android,android-toolbar,searchview
来源: https://codeday.me/bug/20190702/1360938.html