无法将android徽标添加到操作栏中

时间:2015-04-14 13:40:24

标签: android icons

我想要的只是我在活动名称旁边的清单(ic_launcher.png)中指定的徽标。它显示为启动器的图标,但不显示在菜单中。我已将徽标和图标属性指向清单中的这一个图像。我在OnCreateOptionMenu中使用getMenuInflater()来填充屏幕顶部的菜单。这一直很好。我进行了设置,以便用户可以单击并浏览应用程序的不同活动。显示应用程序的名称,但该栏中没有图标。

我的清单上有徽标:

 <application
        android:allowBackup="true"
        android:logo="@mipmap/ic_launcher"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

当我将此代码置于启用状态时,程序崩溃。为什么呢?

    ActionBar actionBar= getActionBar();
    actionBar.setDisplayUseLogoEnabled(true);

On android's own developer site它说:

  

使用徽标而非图标

     

默认情况下,系统会使用操作栏中的应用程序图标,   由or中的icon属性指定   元件。但是,如果您还指定了logo属性,那么   操作栏使用徽标图像而不是图标。

我也尝试使用相同的结果直接运行它:

getActionBar().setDisplayUseLogoEnabled(true);

崩溃:

Caused by: java.lang.NullPointerException
at .MainActivity.onCreate(MainActivity.java:33)

它指的是上述陈述。

我也尝试过:

getSupportActionBar().setDisplayUseLogoEnabled(true);

该应用程序不会因此而崩溃,但没有徽标。

我有Theme.AppCompat.Light.DarkActionBar作为我的应用主题,我相信这会占用我的图标。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
</style>

我正在延长ActionBarActivity并夸大菜单getMenuInflater().inflate(R.menu.menu_main, menu);

我正在扩展ActionBarActivity。

7 个答案:

答案 0 :(得分:1)

这个问题很可能是因为您使用的是21. +或22. +版本的支持库。从Lollipop开始,不鼓励使用ActionBar中的app徽标,最新版本的支持库反映了这一变化。

如果您仍希望在ActionBar中使用应用徽标,则需要在布局中添加Toolbar视图(有关此视图的更多信息,请here)并使用其中一种setLogo()方法:firstsecond

答案 1 :(得分:0)

我还建议您使用 android:icon =&#34; @ drawable / ic_launcher&#34; 代替。(尝试 @drawable

如果它不起作用,请尝试getActionBar().setDisplayShowHomeEnabled(true); (应在setContentView(R.layout.activity_main);之前致电)

顺便说一下,如果你想为每个不同的Activity指定一个图标,你也可以在Activity中设置 android:logo =&#34; @ drawable / YOUR_ICON&#34;

希望它有效

答案 2 :(得分:0)

试试这个......

<style name="MyActionBarLogo" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="background">@color/mainColor500</item>
    <item name="logo">@drawable/actionbar_logo</item>
    <item name="displayOptions">useLogo|showHome</item>
</style>

答案 3 :(得分:0)

getSupportActionBar().setDisplayShowHomeEnabled(false);
getSupportActionBar().setDisplayUseLogoEnabled(true);

答案 4 :(得分:0)

根据Android blogmipmap文件夹用于应用程序图标,但不是说应用程序徽标也可以。所以我想你最好从drawable文件夹中设置logo:

<application
    android:allowBackup="true"
    android:logo="@drawable/ic_launcher"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

希望这有帮助!

答案 5 :(得分:0)

您的代码存在多个问题。

由于您正在使用ActionBarActivity和AppCompat,因此您必须了解使用ActionBarActivity时它究竟意味着什么。

您尚未发布您的代码,因此不清楚您是否使用工具栏或ActionBar(ActionBar已弃用,如果您仍在使用,则不应该使用。)

如果您已经在使用工具栏,则可以像这样设置图标。

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    if (toolbar != null) {
        setSupportActionBar(toolbar);
        toolbar.setLogo(R.drawable.icon_here);
    }

如果您没有使用工具栏,请先在主题中设置这些行。

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primary_dark</item>
        <item name="colorAccent">@color/accent</item>

<!-- following two lines -->
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
</style>

然后在您的活动布局文件中添加顶部的工具栏。

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    >

答案 6 :(得分:-1)

android:logo="@drawable/...."添加到清单文件的“应用程序”部分。

android:logo     整个应用程序的徽标,以及活动的默认徽标。

此属性必须设置为对包含图像的可绘制资源的引用(例如&#34; @ drawable / logo&#34;)。没有默认徽标。