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

Posted

技术标签:

【中文标题】Android:如何将ActionBar“主页”图标更改为应用程序图标以外的东西?【英文标题】:Android: How to change the ActionBar "Home" Icon to be something other than the app icon? 【发布时间】:2011-09-15 03:22:31 【问题描述】:

我的应用程序的主图标在一张图片中由两部分组成:一个徽标和它下面的几个字母。这适用于应用程序的启动器图标,但是当图标出现在 ActionBar 的左边缘时,字母会被截断,看起来不太好。

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

【问题讨论】:

【参考方案1】:

ActionBar 将使用清单的android:logo 属性(如果提供)。这使您可以为图标(启动器)和徽标(ActionBar 等)使用单独的可绘制资源。

【讨论】:

是的。您还可以为您的操作栏使用自定义样式,以提供将用于代替清单提供的徽标或图标。 @Joe , API 【参考方案2】:

在 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 也可以。我不知道有什么区别。 抱歉撕毁愈合伤口 :-) 但不同之处在于此处建议的样式更改解决方案仅将自定义图标应用于操作栏,而在清单中定义 android:logo 可能会影响其他领域也是如此。 @dbm,你能举个“其他地区”的例子吗? 是的,我很好奇,我开始用谷歌搜索它,这就是 Android 开发者网站所说的:developer.android.com/guide/topics/manifest/…。不过,我不清楚这与 andorid:icon 属性有何不同:developer.android.com/guide/topics/manifest/… Action Bar doc 还说您可以将android:icon 添加到&lt;activity&gt; 元素中,这样您就可以轻松地为不同的活动更改它。我试过了,效果很好。无需弄乱自定义主题或担心影响所有活动。【参考方案3】:

请试试这条线

getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_arrow);

【讨论】:

注意:setHomeAsUpIndicator 是 Android API 18+。【参考方案4】:

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

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

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

【讨论】:

不起作用!!你试过了吗?请找到我需要的解决方案。【参考方案5】:

受到 TheIT 的启发,我只是通过操作清单文件来实现这一点,但方式略有不同。在应用程序设置中设置图标,以便大多数活动获得图标。在要显示徽标的活动上,将 android:logo 属性添加到活动声明中。在下面的例子中,只有 LogoActivity 应该有 logo,而其他的将默认为 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,但是你的方法不起作用。【参考方案6】:

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

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

【讨论】:

【参考方案7】:

创建标志

在文件夹“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"
    ...

就是这样。

【讨论】:

【参考方案8】:

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

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

更新

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

【讨论】:

感谢您提供该链接,我可能最终会从我的图标中删除字母并在整个应用程序中使用相同的“徽标”图标,但我可能仍需要使用它的较小版本,或者在 ActionBar 上稍微不同的版本,这就是我想要找出的。

以上是关于Android:如何将ActionBar“主页”图标更改为应用程序图标以外的东西?的主要内容,如果未能解决你的问题,请参考以下文章

ActionBar的后退主页按钮无法使用片段

android如何去掉actionbar

Android:如何/教程将 ActionBar 更改为 ActionBarCompat(工具栏)?

主页右侧的ActionBar按钮

如何在Android中居中&左&右对齐ActionBar图标

如何在ActionBar(Android)中添加按钮?