Android SearchView图标不会显示在ActionBar中,相反,如果有空间,则会显示“SEARCH”字样。
我们如何使用它:
public static MenuItem addSearchItem(Menu menu, SearchView searchView) {
MenuItem item = menu.add(Menu.NONE, R.id.search_item, Menu.NONE, R.string.search_label);
MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
MenuItemCompat.setActionView(item, searchView);
...
}
这样称呼:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
if (itemsLoaded) {
inflater.inflate(R.menu.new_episodes, menu);
final SearchView sv = new SearchView(getActivity());
MenuItemUtils.addSearchItem(menu, sv);
但是,如果我们只使用SHOW_AS_ACTION_IF_ROOM,那么我们将获得图标,但如果搜索被折叠到菜单中,则SearchView将无法工作。
关于这可能是什么的任何想法?
更新
即使在菜单xml中定义了SearchView,也会发生此行为。 如果您未指定'collapseActionView',它似乎只会表现正常。
布局:
<item android:id="@+id/action_search"
android:icon="?attr/searchIcon"
android:title="@string/search_label"
custom:showAsAction="ifRoom|collapseActionView"
custom:actionViewClass="android.support.v7.widget.SearchView"/>
创作代码:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
if (itemsLoaded) {
inflater.inflate(R.menu.new_episodes, menu);
final MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView sv = (SearchView) MenuItemCompat.getActionView(searchItem);
sv.setQueryHint(getString(R.string.search_hint));
SearchViewCompat.setOnQueryTextListener(sv, new SearchViewCompat.OnQueryTextListenerCompat() {
@Override
public boolean onQueryTextSubmit(String s) {
sv.clearFocus();
((MainActivity) getActivity()).loadChildFragment(SearchFragment.newInstance(s));
return true;
}
@Override
public boolean onQueryTextChange(String s) {
return false;
}
});