自动展开并关注SearchView
我正在开发一个应用程序,用户在ActionBar
按下“search”图标,并在屏幕顶部显示一个SearchView
。
我的问题是, SearchView
没有焦点也没有扩大,所以用户必须按下searchSearchview
上的searchbutton,使其扩大和带出键盘。
这应该如何解决?
要使SearchView默认展开,请在初始化时调用setIconifiedByDefault(false)
(例如,在onCreateOptionsMenu(..)
或onPrepareOptionsMenu(..)
)。 我发现在大多数情况下,这会自动对焦,但如果不是简单地调用requestFocus()
。
你也可以调用expandActionView()方法来强制它:
@Override public boolean onCreateOptionsMenu( Menu menu ) { super.onCreateOptionsMenu( menu ); MenuItem searchMenuItem = menu.findItem( R.id.mi_search ); // get my MenuItem with placeholder submenu searchMenuItem.expandActionView(); // Expand the search menu item in order to show by default the query return true; }
在操作栏布局中search项目:
<item android:id="@+id/mi_search" android:icon="@drawable/abs__ic_search_api_holo_light" android:title="@string/search" android:showAsAction="ifRoom|collapseActionView" android:actionViewClass="com.actionbarsherlock.widget.SearchView" />
如果你想要它iconifiedByDefault
,这为我工作。 需要setFocusable
和setIconified
。
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.setIconifiedByDefault(true); searchView.setFocusable(true); searchView.setIconified(false); searchView.requestFocusFromTouch();
更新:如果您使用android.support.v7.widget.SearchView
的行为我们很不一样。 如果您不想随时popup键盘,则需要clearFocus
。 出于某种原因,使用appcompat时,菜单总是被重新创build。
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.setIconified(false); searchView.clearFocus();
如果你在布局中使用它,你可以打电话
mSearchView.onActionViewExpanded()
这对我工作:
menu.expandActionView();
这对我工作:
在根布局中:
xmlns:app="http://schemas.android.com/apk/res-auto"
SearchView定义如下:
<android.support.v7.widget.SearchView android:id="@+id/search_contacts" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_margin="15dp" android:background="@drawable/search_view" app:iconifiedByDefault="false" app:queryHint="Search name or email" > <requestFocus /> </android.support.v7.widget.SearchView>
不同之处在于应用程序标记。
app:iconifiedByDefault="false" app:queryHint="Search name or email"
如果你在一个活动中使用,你需要使用
view.onActionViewExpanded();
如果你正在使用里面的菜单选项,你需要使用
MenuItem.expandActionView();
注意:它仅适用于SearchView
这两种情况是为我工作的。
您可以在Java代码的SearchView句柄上使用SearchView#setIconified()
方法。 更多在这里:
http://developer.android.com/reference/android/widget/SearchView.html#setIconified(boolean);
你也可以使用SearchView#setIconifiedByDefault()
。 更多信息:
http://developer.android.com/reference/android/widget/SearchView.html#setIconifiedByDefault(boolean);
用这个
SearchManager searchManager = (SearchManager) mActivity.getSystemService(Context.SEARCH_SERVICE); SearchView searchView = new SearchView(mActivity.actionBar.getThemedContext()); searchView.setSearchableInfo(searchManager.getSearchableInfo(mActivity.getComponentName())); searchView.setIconifiedByDefault(false); searchView.setQueryHint("Search"); menu.findItem(R.id.action_search).setActionView(searchView);
MenuItemCompat的SearchView有一个名为maxWidth的属性。
final MenuItem searchItem = menu.findItem(R.id.action_search); final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); searchView.setMaxWidth(xxx);
使用屏幕宽度而不是xxx offcourse
android:iconifiedByDefault="true"
在你的xml文件中
我正在使用android.widget Searchview并默认图标化。xml中的下面的代码帮助我扩展和自动对焦search视图,单击时:
<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"/>
@帕斯卡利斯的答案为我工作。 但是,每次closuresSearchView,然后再次单击,就失去了焦点。 所以我把代码插入setOnMenuItemClickListener
像这样:
MenuItem item = menu.findItem(R.id.action_search); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); final SearchView searchView = (SearchView) item.getActionView(); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem menuItem) { searchView.setIconifiedByDefault(true); searchView.setFocusable(true); searchView.setIconified(false); searchView.requestFocusFromTouch(); return false; } });
对于Appcompat Searchview,你可以使用这个方法:
MenuItemCompat.expandActionView(mSearchMenuItem);