我正在开发一个应用程序,用户在其中按下“搜索”图标,ActionBar
并SearchView
在屏幕顶部显示 a。
我的问题是它既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"
/>
要使 SearchView 默认展开,请在初始化时调用setIconifiedByDefault(false)onCreateOptionsMenu(..)
(例如 in或onPrepareOptionsMenu(..)
)。我发现在大多数情况下,这会自动给它焦点,但如果不是简单地调用requestFocus()
它。
如果你想拥有它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()
这对我有用:
在根布局中:
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
这两种情况对我有用。
这对我有用:
menu.expandActionView();
您可以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)
@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;
}
});
科特林
var searchView = menu.findItem(R.id.action_search).actionView as SearchView
searchView.isIconified = true
对于 Appcompat Searchview,您可以使用此方法:
MenuItemCompat.expandActionView(mSearchMenuItem);
用这个
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);
我很难做到这一点SearchView widget
,但expandActionView() method
实际上是在 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。
menuItem.expandActionView()
<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 offcourse
我正在使用 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"/>
android:iconifiedByDefault="true"
以上是 XML 中的代码,帮助我在单击时扩展并自动聚焦在搜索视图上: