我正在开发一个应用程序,用户可以在其中按“搜索”图标,ActionBar
并SearchView
在屏幕顶部显示a。
我的问题是键盘SearchView
既没有聚焦也没有展开,因此用户必须按上的搜索按钮Searchview
使其展开并拿出键盘。
应该如何解决?
Answers:
要使SearchView在默认情况下展开,请在初始化它时(例如在或中)对其调用setIconifiedByDefault(false)。我发现在大多数情况下,这将使它自动聚焦,但即使不是简单地调用它,也是如此。onCreateOptionsMenu(..)
onPrepareOptionsMenu(..)
requestFocus()
requestFocus()
电话onPrepareOptionsMenu(..)
对我有用。
requestFocus
对我不起作用。以“专注”可以调用setIconified
与false
app:showAsAction="always"
。当我取消自动对焦时,该图标消失了,并出现了3点图标
您也可以调用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"
/>
expandActionView()
直接在上调用searchMenuItem
,则应改用:MenuItemCompat.expandActionView(searchMenuItem)
。
searchMenuItem.expandActionView();
如果您想拥有它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
是行为,我们会大不相同。clearFocus
如果您不希望键盘一直弹出,则需要此选项。由于某些原因,在使用appcompat时始终会重新创建菜单。
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setIconified(false);
searchView.clearFocus();
如果您在布局中使用它,可以致电
mSearchView.onActionViewExpanded()
View
不是MenuItem
这为我工作:
在根目录中:
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"
您可以SearchView#setIconified()
在Java代码中的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)
用这个
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);
@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;
}
});
我使用的是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>
调用expandActionView()
menuItem。
menuItem.expandActionView()
android:iconifiedByDefault="true"
上面是XML代码,可帮助我使其扩展并在单击时自动聚焦于搜索视图: