我正在开发一个应用程序,用户在 ActionBar
中按下“搜索”图标后,在屏幕顶部会出现一个可见的 SearchView
。
我的问题是 SearchView
没有聚焦或展开,因此用户必须按下 SearchView
上的搜索按钮才能将其展开并弹出键盘。
如何解决这个问题?
http://developer.android.com/reference/android/widget/SearchView.html#setIconified(boolean)
您还可以使用SearchView#setIconifiedByDefault()
。更多信息请参见此处:
http://developer.android.com/reference/android/widget/SearchView.html#setIconifiedByDefault(boolean)
对于Appcompat Searchview,您可以使用以下方法:
MenuItemCompat.expandActionView(mSearchMenuItem);
我在使用 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
expandActionView()
。menuItem.expandActionView()
@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;
}
我正在使用 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"/>
<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>
MenuItemCompat的SearchView有一个名为maxWidth的属性。
final MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setMaxWidth(xxx);
当然要使用屏幕宽度而不是 xxx
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);
android:iconifiedByDefault="true"
以上是XML中的代码,帮助我在搜索视图上单击时展开并自动聚焦: