SearchView不会在ActionBar中显示带有SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW和SHOW_AS_ACTION_IF_ROOM的图标

时间:2015-05-10 20:27:11

标签: java android android-appcompat

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);

SEARCH word being displayed instead of icon

但是,如果我们只使用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;
            }
        });

0 个答案:

没有答案