我正在尝试避免在横向上进行全屏键盘编辑以访问建议。
我已经阅读了很多线程,解释说我必须添加像 flagNoFullscreen 和/或 flagNoExtractUi 这样的EditorInfo标志。
我以编程方式添加了它们,但并没有真正帮助。
有没有办法解决这个问题?
答案 0 :(得分:22)
我花了一段时间才想出这个,但实际上很简单。
最初我创建了一个扩展SearchView类的自定义类,并使用了onCreateInputConnection()
覆盖,但是我无法以这种方式工作。
我最终以更加简单的方式使用它,只添加了两行代码。
您只需致电search.getImeOptions()
即可获取当前配置,然后通过调用EditorInfo.IME_FLAG_NO_EXTRACT_UI
与setImeOptions()
“或”结果:
search.setImeOptions(options|EditorInfo.IME_FLAG_NO_EXTRACT_UI);
如果你没有“或”使用现有的选项,那么你没有得到右下方的“搜索”完成按钮,你只需要一个“完成”按钮。
以下是我用来测试的完整onCreateOptionsMenu()
覆盖(我在xml中使用了SearchView,但即使你没有从xml中膨胀你的SearchView,这个解决方案也适合你):
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView search = (SearchView) menu.findItem(R.id.action_search).getActionView();
SearchableInfo si = manager.getSearchableInfo(getComponentName());
//Here is where the magic happens:
int options = search.getImeOptions();
search.setImeOptions(options|EditorInfo.IME_FLAG_NO_EXTRACT_UI);
//!!!!!!!!!!!
search.setSearchableInfo(si);
search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String query) {
return true;
}
});
return true;
}
这是我在menu_main.xml中用于SearchView的xml:
<item android:id="@+id/action_search"
android:title="Search"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always"
app:actionViewClass="android.support.v7.widget.SearchView"
/>
没有调用setImeOptions()
的结果:
调用setImeOptions()
的结果:
答案 1 :(得分:1)
该代码的另一种替代方法是在searchView xml中添加该属性,它对于小于16的API非常有用:
<SearchView
android:imeOptions="flagNoExtractUi" />
答案 2 :(得分:0)
与上述相同的想法,但没有SearchView,仅使用可搜索的XML
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
...
android:imeOptions="actionSearch|flagNoExtractUi"
...
</searchable>