操作栏不显示操作视图图标

Jum*_*mpa 30 android android-actionbar android-support-library android-actionbar-compat

我正在使用新的Action Bar支持,我的所有操作视图都显示在溢出中,而不是栏中的图标.我的应用程序适用于7+ API.

HomeActivity:

public class HomeActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ActionBar actionBar = getSupportActionBar();
        actionBar.setTitle(R.string.app_name);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.home, menu);
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

home.xml

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/action_settings"/>
<item
    android:id="@+id/action_browse"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/title_activity_browse"/>
<item
    android:id="@+id/action_search"
    android:actionViewClass="android.widget.SearchView"
    android:icon="@android:drawable/ic_menu_search"
    android:showAsAction="ifRoom|collapseActionView"
    android:title="@string/text_search"/>
<item
    android:id="@+id/action_scan"
    android:icon="@drawable/action_scan"
    android:showAsAction="always"
    android:title="@string/title_activity_browse"/>
Run Code Online (Sandbox Code Playgroud)

我在4.3上使用Nexus 7,在2.3.3上使用LGP500,没有图标.我还在清单上添加了android:theme ="@ style/Theme.AppCompat.Light.DarkActionBar",我的项目正确引用了官方文档中描述的android-support-v7-appcompat.

Mar*_*nci 82

您必须menu使用支持库的属性定义资源文件.

要实现后端支持,它会读取它们而不是旧版Android中定义的内容.

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:yourapp="http://schemas.android.com/apk/res-auto" >

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    yourapp:showAsAction="never"
    android:title="@string/action_settings"/>
<item
    android:id="@+id/action_browse"
    android:orderInCategory="100"
    android:showAsAction="never"
    yourapp:showAsAction="never"
    android:title="@string/title_activity_browse"/>
<item
    android:id="@+id/action_search"
    android:actionViewClass="android.support.v7.widget.SearchView"
    android:icon="@android:drawable/ic_menu_search"
    android:showAsAction="ifRoom|collapseActionView"
    yourapp:showAsAction="ifRoom|collapseActionView"
    yourapp:actionViewClass="android.support.v7.widget.SearchView"
    android:title="@string/text_search"/>
<item
    android:id="@+id/action_scan"
    android:icon="@drawable/action_scan"
    android:showAsAction="always"
    yourapp:showAsAction="always"
    android:title="@string/title_activity_browse"/>

</menu>
Run Code Online (Sandbox Code Playgroud)

NB 记得为SearchView类改变了.它现在使用了支持库中的一个,因此您还必须更新onCreateOptionsMenu()中的代码

编辑: 是一个很好的教程,介绍如何从ActionBarSherlok迁移到AppCompat

  • 什么是`yourapp:actionViewClass`中的"yourapp".显然它不是包名,因为我试过'com.mycompany.myproject`而什么也没得到. (2认同)