自动扩展并将焦点放在SearchView上

82

我正在开发一个应用程序,用户在 ActionBar 中按下“搜索”图标后,在屏幕顶部会出现一个可见的 SearchView

我的问题是 SearchView 没有聚焦或展开,因此用户必须按下 SearchView 上的搜索按钮才能将其展开并弹出键盘。

如何解决这个问题?

20个回答

2

2

对于Appcompat Searchview,您可以使用以下方法:

MenuItemCompat.expandActionView(mSearchMenuItem);

1

我在使用 SearchView widget 时遇到了困难,但是 expandActionView() 方法 实际上是定义在 MenuItem 类中而不是 SearchView 类中的。因此,我通过以下方式解决了这个问题。

        MenuItem searchItem = menu.findItem(R.id.item_search);
        SearchView   searchView = (SearchView) searchItem.getActionView();
        searchItem.expandActionView();//the method expandActionView is called on searchItem not searchView

1
在菜单项上调用expandActionView()
menuItem.expandActionView()

1
"android.widget.SearchView"与其他菜单项的行为不同。因此,您应该使用"setOnSearchClickListener"而不是"OnMenuItemClickListener"或"onOptionsItemSelected"。
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    super.onCreateOptionsMenu(menu);
    final MenuItem menuItem = menu.findItem(R.id.search_menu_search_view);
    final SearchView searchView = (SearchView)menuItem.getActionView();
    searchView.setIconifiedByDefault(true);

    // Just like this!
    searchView.setOnSearchClickListener(view -> {
        view.requestFocus();
    });

    return true;
}

0

我正在使用 android.widget Searchview 并默认情况下处于图标化状态。以下 XML 代码帮助我使其扩展并在单击时自动聚焦搜索视图:

<SearchView
                android:id="@+id/searchView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:iconifiedByDefault="true"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:queryHint="Search"/>

0

 <item
        android:id="@+id/search"
        android:icon="@drawable/ic_search"
        android:title="Search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="always"/>

 public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.search_menu, menu);
        // Associate searchable configuration with the SearchView
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        searchView = (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setQueryHint("Search the customer...");
        searchView.setSearchableInfo(Objects.requireNonNull(searchManager).getSearchableInfo(getComponentName()));
        searchView.setMaxWidth(Integer.MAX_VALUE);
        searchView.setIconifiedByDefault(false);
        searchView.requestFocus();

    }

<pre>

 <item
        android:id="@+id/search"
        android:icon="@drawable/ic_search"
        android:title="Search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="always"/>

 public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.search_menu, menu);
        // Associate searchable configuration with the SearchView
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        searchView = (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setQueryHint("Search the customer...");
        searchView.setSearchableInfo(Objects.requireNonNull(searchManager).getSearchableInfo(getComponentName()));
        searchView.setMaxWidth(Integer.MAX_VALUE);
        searchView.setIconifiedByDefault(false);
        searchView.requestFocus();

    }

</pre>


0

MenuItemCompat的SearchView有一个名为maxWidth的属性。

final MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setMaxWidth(xxx);

当然要使用屏幕宽度而不是 xxx


0
这是我的使用组合:
searchView.onActionViewExpanded(); //focus searchView
searchView.setQuery(searchKey, false); //set query

//Hide Keyboard
InputMethodManager imm = (InputMethodManager) this.getSystemService(Activity.INPUT_METHOD_SERVICE);

imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);

-2

android:iconifiedByDefault="true"

以上是XML中的代码,帮助我在搜索视图上单击时展开并自动聚焦:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接