如何自定义ActionBar上的后退按钮


188

我已经能够使用以下建议来自定义操作栏的背景,徽标图像和文本颜色:
Android:如何将ActionBar“主页”图标更改为应用程序图标以外的其他内容?
ActionBar文字颜色
ActionBar背景图片

我要自定义的最后一块是后退按钮图像。默认情况下它是灰色的,我希望它是白色的。更改颜色,指定可绘制对象或简单地使其透明(然后将V形符号添加到我的自定义徽标图像中)都可以。我该怎么办?


1
操作栏上没有“返回”按钮。“后退”按钮在系统栏上,或者不在屏幕上(对于带有屏幕外“后退”按钮的设备)。
CommonsWare'2

1
@CommonsWare,我不确定操作栏中的“左人字形”叫什么-但这就是我所说的“后退”按钮。我认为,预计以后它将取代android设备上的物理后退按钮。
Sunil Gowda '02

13
不,不。那就是“向上”指示器(尽管箭头方向)。您可以通过setDisplayHomeAsUpEnabled()on 启用它ActionBar。特别地,它应该简单地“返回”。这意味着点击应用程序图标将“向上”层次结构,而不是返回到上一个活动(系统栏上的“返回”按钮也是如此)。
CommonsWare,2012年

2
“那么那些没有物理后退按钮的新设备呢,它们都显示一个'软'后退按钮吗?”-它们都应该在系统栏中有一个BACK按钮。
CommonsWare'2

3
只是想在很多情况下,添加UP键WILL干脆回去。请参阅“当以前查看的屏幕也是当前屏幕的层次结构父级时,按Back键将具有与按Up键相同的结果-这是常见的情况。” from developer.android.com/design/patterns /navigation.html
多里(Dori)

Answers:


390

“上”提供能力指示符由homeAsUpIndicator主题属性中指定的可绘制对象提供。要用您自己的自定义版本覆盖它,将是这样的:

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo">
    <item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>
</style>

如果您的应用程序支持3.0之前的版本,请确保将此版本的自定义主题放入values-v11或类似版本。


10
也为我工作。我在github上的AOSP中声明了设置为我的ActionBarStyle的样式集,但是它不起作用-移入主主题就可以了!+1
多里(Dori)2012年

37
<item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>不适用于我,但适用<item name="homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>。猜猜它的Android版本的事情
米哈尔ķ

6
有什么办法可以将其顶部和底部填充设置为0dp吗?
James McCracken 2013年

3
@JamesMcCracken我能够做到这一点的唯一方法是通过自定义布局。
greg7gkb

4
有人与之合作Navigation Drawer吗?我想ActionBarDrawerToggle用自己的一个替换向上指示器,因此将其设置为样式没有效果……
Lucas Jota 2015年

89

因此,您可以使用Android API级别18及更高版本中添加的homeAsUpIndicator()函数轻松地以编程方式对其进行更改。

ActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);

如果您使用支持库

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


5
如果您使用的是抽屉,则必须drawerToggle.setDrawerIndicatorEnabled(false);在更改指示器之前致电
牙线

2
@Floss谢谢你setDrawerIndicatorEnabled(false / true); 解决了我的问题,根据我的要求将主页按钮设置为一致的“后退”和(打开抽屉/关闭抽屉)。
阿什拉夫·阿尔沙哈威

1
@Floss抽屉Toggle.setDrawerIndicatorEnabled(false); 它对我有用:)
上下文

30

我已经检查了问题。这是我遵循的步骤。源代码托管在GitHub上:https//github.com/jiahaoliuliu/sherlockActionBarLab

覆盖v11之前的设备的实际样式。

将以下代码复制并粘贴到默认值文件夹的styles.xml文件中。

<resources>
    <style name="MyCustomTheme" parent="Theme.Sherlock.Light">
    <item name="homeAsUpIndicator">@drawable/ic_home_up</item>
    </style>
</resources>

请注意,父级可以更改为任何Sherlock主题。

覆盖v11 +设备的实际样式。

在文件夹值所在的同一文件夹上,创建一个名为values-v11的新文件夹。对于具有API或更高版本的设备,Android会自动查找此文件夹的内容。

创建一个名为styles.xml的新文件,并将以下代码粘贴到该文件中:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyCustomTheme" parent="Theme.Sherlock.Light">
    <item name="android:homeAsUpIndicator">@drawable/ic_home_up</item>
    </style>
</resources>

请注意,样式名称必须与默认值文件夹中的文件相同,并且代替项homeAsUpIndicator,它的名称为android:homeAsUpIndicator。

出现该问题的原因是,对于具有API 11或更高版本的设备,Sherlock操作栏使用Android随附的默认操作栏,其键名为android:homeAsUpIndicator。但是对于具有API 10或更低版本的设备,Sherlock Action Bar使用其自己的ActionBar,将首页作为向上指示器称为简单的“ homeAsUpIndicator”。

在清单中使用新主题

在AndroidManifest文件中替换应用程序/活动的主题:

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

2
如果您正在寻找已经可用的全息图标,则可以尝试@ drawable / abc_ic_ab_back_holo_light或@ drawable / abc_ic_ab_back_holo_dark。
李森(Mason Lee)

25

改回导航图标对于ActionBar和Toolbar是不同的。

对于ActionBar覆盖homeAsUpIndicator属性:

<style name="CustomThemeActionBar" parent="android:Theme.Holo">
    <item name="homeAsUpIndicator">@drawable/ic_nav_back</item>
</style>

对于工具栏覆盖navigationIcon属性:

<style name="CustomThemeToolbar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="navigationIcon">@drawable/ic_nav_back</item>
</style>


5

如果使用工具栏,则不需要这些解决方案。您只需要更改工具栏的主题

app:theme="@style/ThemeOverlay.AppCompat.Light"

app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"

如果您使用dark.actionBar,则后退按钮将变为白色;否则,如果使用浅色Actionbar主题,则后退按钮将变为黑色。


您的代码对我有用,但是我们可以更改该指示器的颜色吗?
Steve Luck 2015年

2
colorControlNormal和android:textColorSecondary值对此负责,但我不太确定这些值还会改变什么。您可以通过在工具栏主题上定义这些值来尝试一下。
Oguz Ozcan 2015年

我正在使用“ app:theme =“ @ style / ThemeOverlay.AppCompat.Light””在背景白色中显示navigationIcon,但它正在显示默认的灰色图标,我需要将其更改为蓝色。“ colorControlNormal和android:textColorSecondary”不起作用。
史蒂夫·勒克

2
使用以“ ThemeOverlay.AppCompat.Light”作为父级的自定义主题。这可能有效。
Oguz Ozcan 2015年

1
我找到了使用name =“ colorControlNormal”而不是name =“ android:colorControlNormal”来更改导航图标的解决方案。但是我想更改为其他可绘制对象吗?
史蒂夫·勒克


0

我在项目menifest.xml文件中使用了back.png图像。在项目中工作很好。

<activity
        android:name=".YourActivity"
         android:icon="@drawable/back"
        android:label="@string/app_name" >
    </activity>

0

由于没有在Gradle Resource目录图标中管理图标,我遇到了相同的操作栏主按钮图标方向问题

就像在阿拉伯语Gradle资源目录中,您将图标放在x-hdpi中,而在英语Gradle资源中,相同的图标名中您放在不同的密度文件夹(如xx-hdpi)中一样,以便在APK中,不同目录中会有两个相同的图标名,因此您的设备将选择依赖于密度的图标,可能是RTL或LTR

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.