有没有办法避免在横向上使用全屏SearchView /键盘?

13K*_*3KZ 11 java user-interface android landscape searchview

我试图避免在横向上进行全屏键盘编辑以访问建议.

我已经阅读了很多线程,解释说我必须添加像FlagNoFullscreen和/或flagNoExtractUi这样的EditorInfo标志.

我以编程方式添加了它们但没有真正帮助.

有没有办法解决这个问题?

Dan*_*ent 23

我花了一段时间才弄明白这个,但实际上很简单.

最初我创建了一个扩展SearchView类的自定义类,并使用了onCreateInputConnection()覆盖,但是我无法以这种方式工作.

我最终以更加简单的方式使用它,只添加了两行代码.

您只需要调用search.getImeOptions()以获取当前配置,然后EditorInfo.IME_FLAG_NO_EXTRACT_UI通过调用"或" 调用结果setImeOptions():

search.setImeOptions(options|EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Run Code Online (Sandbox Code Playgroud)

如果你没有"或"使用现有的选项,那么你没有得到右下角的"搜索"完成按钮,你只需要一个"完成"按钮.

这是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;
}
Run Code Online (Sandbox Code Playgroud)

这是我在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"
        />
Run Code Online (Sandbox Code Playgroud)

结果没有调用setImeOptions():

之前

调用结果setImeOptions():

在此输入图像描述