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

时间:2015-07-16 13:45:21

标签: java android user-interface landscape searchview

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

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

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

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

3 个答案:

答案 0 :(得分:22)

我花了一段时间才想出这个,但实际上很简单。

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

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

您只需致电search.getImeOptions()即可获取当前配置,然后通过调用EditorInfo.IME_FLAG_NO_EXTRACT_UIsetImeOptions()“或”结果:

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()的结果:

Before

调用setImeOptions()的结果:

enter image description here

答案 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>