应用程序图标不会显示在操作栏上

时间:2014-11-10 07:25:41

标签: android android-actionbar icons android-appcompat material-design

我按照建立一个新的android项目的指示进行操作,除了操作栏的问题外,我得到了一个可运行的项目。问题是应用程序图标没有显示在操作栏上的应用程序标题旁边。我使用以下配置创建了项目:

  • 所需的最低SDK:API 8:Android 2.2(Froyo)

  • 目标SDK:API 21:Android 4.X(L预览)

  • 编译:API 21:Android 4.X(L预览)

  • 主题:Holo Light with Dark Action Bar(Eclipse设置相应的appcompat主题)

  • Android支持库21.0.1

  • Android SDK Build-tools 21.1.1

因为我的最小sdk是api 8,它不支持操作栏,所以项目包含appcompat_v7 library以允许操作栏功能。如果我将最小sdk设置为api 14(android 4.0)或更高,则项目不包括appcompat_v7 library,并且应用程序图标也会成功显示。但我需要我的应用程序支持低至api 8的旧版本。所以我应该怎么做才能解决这个问题?非常感谢你们的关注。

P.S:我在windows,mac,eclipse,android studio上完成了上面的任务,得到了相同的结果。

6 个答案:

答案 0 :(得分:57)

您使用的是AppCompat版本21+,这是正常的。

操作栏遵循材料设计指南并使用Toolbar。 正如您可以阅读here

  

使用应用程序图标加标题作为标准布局   对API 21设备和更新设备不鼓励。

如果您想要一个应用程序图标(但我不鼓励它),您可以使用方法setLogo()

这样的事情:

ActionBar actionBar = getSupportActionBar();
actionBar.setLogo(R.drawable.my_logo);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);

答案 1 :(得分:48)

当您使用修订版21的支持库时会出现此问题。

使用:

ActionBar actionBar = getSupportActionBar();
actionBar.setLogo(R.drawable.ic_launcher);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);

它对我有用,或者你可以使用工具栏。工具栏是在应用程序布局中使用的操作栏的概括。

在现代Android UI中,开发人员应该更多地依赖于工具栏的视觉上不同的颜色方案而不是应用程序图标。不鼓励在API 21设备和更新版本上使用应用程序图标和标题作为标准布局。

参考:https://developer.android.com/reference/android/support/v7/widget/Toolbar.html

答案 2 :(得分:9)

确保您在manifest.xml文件中设置了图标,在应用程序标记中为:

    android:icon="@drawable/launcher_icon"

然后在onCreate方法中插入以下行:

    ActionBar ab =getSupportActionBar(); 
    ab.setDisplayShowHomeEnabled(true);
    ab.setIcon(R.drawable.launcher_icon);

答案 3 :(得分:4)

这是一个常见的“问题”。在你拔出头发之前,请确保使用:

import android.support.v7.app.ActionBar; //or the v4, haven't tried with that though

而不是:

import android.app.ActionBar;

然后:

ActionBar actionBar;
actionBar = getSupportActionBar();

而不是:

actionBar = getActionBar();

最后:

if (actionBar != null) {
        // enabling action bar app icon and behaving it as toggle button           
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setIcon(R.drawable.your_icon);
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);
    }

答案 4 :(得分:2)

属性徽标仅用于API级别11及更高级别(当前最小值为8),我也对此问题感到困惑,也许谷歌只是不希望图标显示在材料设计上,当最小sdk设置时到14或更高,21岁以下,它使用全息主题,它有一个图标,但appcompat风格更像是材料设计我想,也许谷歌只是忘了修改全息主题

答案 5 :(得分:2)

IN Style.xml

 <style name="MyTheme_ActionBar" parent="@style/Theme.AppCompat.Light">
   <item name="icon">@drawable/actionbar_logo</item>
  </style>

在活动中添加此内容并尝试

ActionBar mActionBar = getSupportActionBar();
mActionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP |
                             ActionBar.DISPLAY_SHOW_CUSTOM |
                             ActionBar.DISPLAY_SHOW_HOME);
相关问题