android - 操作栏不显示操作 View 图标

标签 android android-actionbar android-support-library android-actionbar-compat

我正在使用新的操作栏支持,我的所有操作 View 都显示为溢出而不是栏中的图标。我的应用适用于 7+ API。

家庭 Activity :

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

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"/>

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

最佳答案

您必须定义您的 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>

注意 请记住,SearchView 类已更改。它现在使用支持库中的那个,因此您还必须更新 onCreateOptionsMenu() 中的代码

编辑: here是一个关于如何从 ActionBarSherlok 迁移到 AppCompat 的非常好的教程

关于android - 操作栏不显示操作 View 图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18099221/

相关文章:

android - 滚动 ListView 时有很多 GC(使用 holder 模式)

android - 如何使用带有 fragment 的操作栏选项卡创建 ListView ?

KitKat(及更低版本)设备上的 Android Material Design

android - 如何摆脱 Android 上操作栏底部的边框

android - 前 Lollipop 设备上的矢量可绘制对象无法正常工作

android - 无法解析 BottomNavigationView 中的方法 'setShiftingMode(Boolean)'

android - 呈现问题 :Binary XML file line #-1: No start tag found

android - 输入法显示时如何不覆盖EditText?

java - Android:单击按钮后隐藏键盘

android - 使用 srcCompat 进行数据绑定(bind)