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

Posted

技术标签:

【中文标题】应用程序图标未显示在操作栏上【英文标题】:The application icon does not show on action bar 【发布时间】:2015-01-06 10:58:51 【问题描述】:

我按照构建新 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 构建工具 21.1.1

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

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

【问题讨论】:

@Andrew Barber,我的问题很清楚,我给出了重现它的配置。它是一个空白的 android 项目,具有我上面列出的配置,不涉及单行代码,也不需要调试帮助,因为根本没有错误。它只是应用程序图标在应该在的操作栏上丢失。你为什么要结束这个问题?这怎么可能不够清楚? 我仍然认为它需要更多信息,但是关于您添加的信息(您应该添加到问题中 - 这也会“碰撞”它),我会继续重新打开。 API21 是 android 5,而不是 4.x。还有哪个版本的 appcompat ?您使用的是 Holo 主题还是 appcompat 主题?发布更多详细信息。 @Gabriele Mariotti,API 21 确实是 android 5.0。但是 eclipse ADT 插件只为我提供“API 21:Android 4.X(L preview)”供我选择,这也让我感到困惑。我使用最新的 appcompat-v7(Android 支持库 21.0.1)和其中的 appcompat 主题,两者都被 eclipse 自动包含并配置到项目中。 @Gabriele Mariotti,我尝试在 windows、mac、eclipse、android studio 上做同样的事情并得到了同样的结果。你能用我的配置创建一个新的android项目来看看这个问题是否也会发生? 【参考方案1】:

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

操作栏遵循材料设计指南并使用Toolbar。 如您所见here:

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

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

类似这样的:

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

【讨论】:

我试过 setLogo 但还是不行。这是我的代码:@Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar ab =getSupportActionBar(); ab.setLogo(R.drawable.ic_launcher); 如果我将最小 sdk 设置为 api 14(android 4.0) 或更高版本,则不会包含 appcompat 并且应用程序图标会成功显示而无需任何相应的代码(如 setLogo)。 如果没有appcompat,您使用的是标准ActionBar(带有Holo Thme),所以这是正常的。 但是为什么 setLogo() 方法不适用于 appcompat?这可能是 AppCompat 21 的错误吗? 这是另一个被这个问题困扰的人。[antonioleiva.com/material-design-everywhere/] (max2817) 但现在至少我知道它是正常的,并由你的回答推荐。也许等更多人加入棒棒糖之后,我才能找到最终的答案。【参考方案2】:

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

用途:

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

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

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

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

【讨论】:

谢谢。一个问题,它是否向后/向前兼容?【参考方案3】:

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

    android:icon="@drawable/launcher_icon"

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

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

【讨论】:

为什么要在两个地方定义??【参考方案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);
    

【讨论】:

这对我有用。谢谢。确实应该有一种更简单的方法来保留应用的样式元素。【参考方案5】:

属性标识只用于API 11及更高级别(当前最低为8),我也对这个问题感到困惑,也许谷歌只是不希望图标显示在材料设计上,当设置了最小sdk 14岁以上21岁以下,使用holo主题,有图标,但appcompat风格我觉得更像material design,可能google只是忘了修改holo主题

【讨论】:

是的,他们默认隐藏图标没问题,但至少他们应该为我们提供一种手动显示它的方法。【参考方案6】:

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

【讨论】:

以上是关于应用程序图标未显示在操作栏上的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序未在 Android 上运行时,使用 React Native 在状态栏上显示通知图标

为什么操作栏上没有显示操作图标

任务栏上没有显示Telerik RadWindow图标c#wpf [复制]

quickType 栏上的自动填充密码键盘键锁图标未显示 - iOS? - 已设置 textContentType = .password?

如何更改将在任务栏上显示的图标

win10任务栏uwp应用没有图标,怎么解决