我正在开发一个应用程序,用户按下"搜索"屏幕顶部显示ActionBar
中的图标和SearchView
。
我的问题是SearchView
没有聚焦也没有扩展,因此用户必须按Searchview
上的搜索按钮才能展开并弹出键盘。
如何解决这个问题?
答案 0 :(得分:104)
您也可以调用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"
/>
答案 1 :(得分:79)
要默认展开SearchView,请在初始化时调用setIconifiedByDefault(false)
(例如,在onCreateOptionsMenu(..)
或onPrepareOptionsMenu(..)
)。我发现在大多数情况下,这会让它自动聚焦,但如果不是,也可以简单地调用requestFocus()
。
答案 2 :(得分:47)
如果你想拥有它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();
答案 3 :(得分:22)
如果您在布局中使用它,可以致电
mSearchView.onActionViewExpanded()
答案 4 :(得分:7)
这对我有用:
在根布局中:
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标签。
app:iconifiedByDefault="false"
app:queryHint="Search name or email"
答案 5 :(得分:5)
如果您在活动中使用,则需要使用
view.onActionViewExpanded();
如果您使用内部菜单选项,则需要使用
MenuItem.expandActionView();
注意:它仅适用于SearchView
这两种情况对我有用。
答案 6 :(得分:4)
这对我有用:
menu.expandActionView();
答案 7 :(得分:2)
您可以在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)
答案 8 :(得分:2)
使用此
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);
答案 9 :(得分:1)
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;
}
});
答案 10 :(得分:0)
科特林
['6.69223420722764', '6.69222819326484', '6.69221180776184', '6.69219149698336', '6.69217949340067', '6.69217956546811', '6.69218526127669', '6.692200130301', '6.69220511560768', '6.69221372090576', '6.69222707128915', '6.69223420722764']
['51.1329165124371', '51.1329081193748', '51.1329013203209', '51.1329073049609', '51.1329244260894', '51.1329430447612', '51.1329578171713', '51.1329606289999', '51.1329581192089', '51.1329518135339', '51.132939215911', '51.1329165124371']
答案 11 :(得分:0)
我很难用SearchView widget
来做到这一点,但是expandActionView() method
实际上是在MenuItem类而不是SearchView类中定义的。所以,我通过
MenuItem searchItem = menu.findItem(R.id.item_search);
SearchView searchView = (SearchView) searchItem.getActionView();
searchItem.expandActionView();
我希望它会有所帮助。 :)
答案 12 :(得分:0)
在菜单项上调用expandActionView()
。
menuItem.expandActionView()
答案 13 :(得分:0)
<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>
答案 14 :(得分:0)
对于Appcompat Searchview,您可以使用此方法:
MenuItemCompat.expandActionView(mSearchMenuItem);
答案 15 :(得分:0)
我正在使用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"/>
答案 16 :(得分:0)
android:iconifiedByDefault="true"
答案 17 :(得分:0)
MenuItemCompat的SearchView有一个名为maxWidth的属性。
final MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setMaxWidth(xxx);
使用屏幕宽度而不是xxx offcourse