Android:AppCompat v21菜单项问题

时间:2014-12-22 15:02:02

标签: android android-support-library android-appcompat android-menu

我忙于将现有的应用程序更改为材料设计,但我在ActionBar中的菜单项出现问题。

首先,我在一些活动中使用了searchview,但我已经读过你需要在searchview菜单xml中使用自定义前缀。所以我做了:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
      <item 
          android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search_light"
          android:title="Search"
          app:showAsAction="ifRoom|collapseActionView"
          app:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>

但每次我收到错误: &#34;不使用appcompat库&#34;

时应使用android:showAsAction

如果我将app:showAsAction="ifRoom|collapseAction"更改为android:showAsAction="ifRoom|collapseActionView" 我没有得到一个搜索视图,它占据了操作栏的整个长度,只是右侧角落放置了一些奇怪的方块。这是我的onCreateOptionsMenu代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.searchview, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search);
    final SearchView search = (SearchView) MenuItemCompat.getActionView(searchItem);

    if(search != null)
    {   
        search.setOnQueryTextListener(new OnQueryTextListener() {

            @Override
            public boolean onQueryTextSubmit(String query) {

                InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(search.getWindowToken(), 0);

                try {
                    new LoadResultsTask().execute(URLEncoder.encode(query, "UTF-8"));
                } catch (UnsupportedEncodingException e) {
                    Toast.makeText(IndexerOverviewActivity.this, "Could not parse Query", Toast.LENGTH_SHORT).show();
                    e.printStackTrace();
                }

                return true;
            }

            @Override
            public boolean onQueryTextChange(String search) {
                return true;
            }
        });
    }
    search.setIconifiedByDefault(false);

    return super.onCreateOptionsMenu(menu);
}

我注意到,当我在设备上启动应用程序时,android:showsAsAction="always"的所有操作栏菜单项都显示为android:showsAsAction="never"。所以我的第一个猜测是它与菜单xml文件中使用的前缀有关。

1 个答案:

答案 0 :(得分:0)

Pffff,经过一次“干净”之后,现在效果很好......

我花了2个小时来解决这个问题。