我正在开发一个应用程序,用户在 ActionBar
中按下“搜索”图标后,在屏幕顶部会出现一个可见的 SearchView
。
我的问题是 SearchView
没有聚焦或展开,因此用户必须按下 SearchView
上的搜索按钮才能将其展开并弹出键盘。
如何解决这个问题?
你也可以调用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;
}
在操作栏布局中搜索项目:
<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"
/>
onCreateOptionsMenu(..)
或onPrepareOptionsMenu(..)
中)。大多数情况下,这将自动使其获得焦点,但如果没有,请在其上调用requestFocus()
方法。onPrepareOptionsMenu(..)
中添加一个requestFocus()
调用对我很有帮助。 - The Dirty CalvinistsetIconified
和false
参数。 - Peter Chaulaapp:showAsAction="always"
。当我移除了自动聚焦功能后,图标消失了,取而代之的是三个点的图标。 - Riccardo如果你想要默认情况下以图标形式显示它,这对我有效。需要使用 setFocusable
和 setIconified
方法。
如果您希望其默认为图标化显示,则此方法适用于我。需要使用 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
,那么行为会非常不同。如果您不希望键盘一直弹出,请使用clearFocus
。出于某种原因,在使用appcompat时菜单总是被重新创建。SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setIconified(false);
searchView.clearFocus();
mSearchView.onActionViewExpanded()
。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();
这对我有用:
menu.expandActionView();
@Pascalius的答案对我有用。但是每次关闭SearchView并再次点击时,焦点都会丢失。因此,我将代码插入到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;
}
});
Kotlin
var searchView = menu.findItem(R.id.action_search).actionView as SearchView
searchView.isIconified = true
使用这个
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);
searchMenuItem
上调用expandActionView()
,你应该使用这个方法:MenuItemCompat.expandActionView(searchMenuItem)
。请注意,此方法可以帮助兼容旧版本的Android系统。 - Charles MaderesearchMenuItem.expandActionView();
加 1。 - VladsearchView.setIconifiedByDefault(false)
- Diego