自动展开并关注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 ,这为我工作。 需要setFocusablesetIconified

  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); 
Interesting Posts