Android:如何将ActionBar“主页”图标更改为应用程序图标以外的其他图标?


114

我的应用程序的主图标在一个图像中包括两个部分:徽标和徽标下方的几个字母。这对于应用程序的启动器图标来说效果很好,但是当图标出现在ActionBar的左边缘时,字母会被截断并且看起来不太好。

我想为ActionBar提供一个单独的图标版本,仅包含“徽标”部分,而不包含其下方的字母,但到目前为止,它是空的。老实说,我找不到任何答案,我什至在任何地方都找不到问题本身。

Answers:


218

如果提供了清单,则ActionBar将使用清单的android:logo属性。这样一来,您就可以为图标(Launcher)和徽标(ActionBar等)使用单独的可绘制资源。


2
是的 您还可以为操作栏使用自定义样式,以提供徽标或图标,以代替清单提供的徽标或图标。
adamp 2011年

@Joe,使用AppCompat的API <11的任何解决方案
cafebabe1991

49

在AndroidManifest.xml中:

<application
    android:icon="@drawable/launcher"
    android:label="@string/app_name"
    android:name="com..."
    android:theme="@style/Theme">...</Application>

在styles.xml中:(请参阅android:icon

<style name="Theme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<style name="ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:icon">@drawable/icon</item>
</style>

android:logo也可以使用。我不知道有什么区别。
AlikElzin-kilaka 2012年

很抱歉撕裂愈合的伤口:-)但是,不同之处在于,此处建议的样式更改解决方案仅将自定义图标应用于操作栏,因为android:logo在清单中进行定义也可能会影响其他区域。
dbm

@dbm,能否请您举例说明“其他领域”?
AlikElzin-kilaka

2
是的,我很好奇,开始在Google上进行搜索,这就是Android开发人员网站所说的内容:developer.android.com/guide/topics/manifest/…。这是我不清楚这是怎么从不同的andorid:icon属性,虽然:developer.android.com/guide/topics/manifest/...
DBM

2
动作栏文档还说您可以添加android:icon<activity>元素,因此可以轻松地针对不同的活动进行更改。我尝试了一下,效果很好。无需弄乱自定义主题,也不必担心会影响所有活动。
杰森


8

如果您使用的是AppCompat,则在运行Gingerbread(API 10)或更低版本的设备上设置ActionBar图标的唯一方法是在清单中的每个Activity中设置android:icon属性,或以编程方式设置可绘制对象。

<manifest>
    <application>
        ...
        <activity android:name="com.your.ActivityName"
            ...
            android:icon="@drawable/ab_logo"/>
        ...
   </application>
</manifest>

更新:但是请注意,如果在启动活动中设置android:icon属性,则应用程序图标将被覆盖。我所知道的唯一解决方法是进行启动或虚拟活动,然后启动您的主活动。


不起作用!你试过了吗?请找到我需要的解决方案。
阿普尔瓦(Apurva)2015年

8

受TheIT的启发,我只是通过操作清单文件而使它工作,但方式略有不同。在应用程序设置中设置图标,以便大多数活动都可以获取图标。在要显示徽标的活动上,将android:logo属性添加到活动声明中。在下面的示例中,只有LogoActivity应该具有徽标,而其他徽标将默认为icon。

<application
    android:name="com.your.app"
    android:icon="@drawable/your_icon"
    android:label="@string/app_name">

    <activity
        android:name="com.your.app.LogoActivity"
        android:logo="@drawable/your_logo"
        android:label="Logo Activity" >

    <activity
        android:name="com.your.app.IconActivity1"
        android:label="Icon Activity 1" >

    <activity
        android:name="com.your.app.IconActivity2"
        android:label="Icon Activity 2" >

</application>

希望这可以帮助其他人!


我正在使用AppCompat v7,因为我想支持android 2.3,但是您的方法无效。
liam xu 2014年

6

如果使用“扩展AppCompatActivity”并显示操作栏,请尝试。

 ActionBar eksinbar=getSupportActionBar();
if (eksinbar != null) {
    eksinbar.setDisplayHomeAsUpEnabled(true);
    eksinbar.setHomeAsUpIndicator(R.mipmap.imagexxx);
}

3

创建徽标

drawable-...所有文件夹中创建logo.png。“ 文件夹的位置: [YOUR APP]\app\src\main\res

在AndroidManifest.xml中添加以下行: android:logo="@drawable/logo"

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:logo="@drawable/logo"
    ...

而已。


0

可能想检查一下,获得了应用图标所需的一切

http://developer.android.com/guide/practices/ui_guidelines/icon_design.html

更新

我认为默认情况下,它使用您的启动器图标...最好的选择是创建一个单独的图像...专为操作栏设计并使用它。对于该检查:http : //developer.android.com/guide/topics/ui/actionbar.html#ActionItems


谢谢您提供的链接,我最终可能会从图标中删除字母,并在整个应用程序中使用相同的“徽标”图标,但是我可能仍需要使用较小的版本或稍有不同的版本ActionBar,这就是我要找出的。
Phil Ringsmuth 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.