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

Sun*_*wda 185 android android-actionbar

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

我要自定义的最后一块是后退按钮图像.它默认是灰色的,我希望它是白色的.更改颜色,指定可绘制或简单地使其透明(并将V形符号添加到我的自定义徽标图像)将起作用.我该怎么做?

Jak*_*ton 384

"up"可供性指标由homeAsUpIndicator主题属性中指定的drawable提供.要使用您自己的自定义版本覆盖它,它将是这样的:

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo">
    <item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

  • `<item name ="android:homeAsUpIndicator"> @ drawable/my_fancy_up_indicator </ item>`对我来说不起作用,但是`<item name ="homeAsUpIndicator"> @ drawable/my_fancy_up_indicator </ item>`做了.猜猜它是android版本的东西 (37认同)
  • 也适合我.我在样式集中声明我的ActionBarStyle,就像在github上的AOSP一样,但它没有工作 - 进入主题就行了!+1 (10认同)
  • 有没有办法将此顶部和底部填充设置为0dp? (6认同)
  • 有人用"导航抽屉"做了这个工作吗?我猜`ActionBarDrawerToggle`用自己的一个取代了up指标,因此在样式上设置它没有效果...... (4认同)
  • @JamesMcCracken我能够做到这一点的唯一方法是通过自定义布局. (3认同)
  • 可能值得注意的是,如果您想要已经可用的全息图标,请使用@ drawable/abc_ic_ab_back_holo_light或@ drawable/abc_ic_ab_back_holo_dark (3认同)
  • 对我不起作用.显示错误.我在values> styles.xml和values-v11> styles.xml中尝试了<item name ="homeAsUpIndicator"> @ drawable/ic_action_arrow_back </ item>.我正在使用v7-appcompat库. (2认同)

小智 86

因此,您可以通过使用在android API级别18和更高版本中添加的homeAsUpIndicator()函数轻松地以编程方式更改它.

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

如果您使用支持库

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

  • 如果您使用抽屉,则必须在更改指示符之前调用`drawerToggle.setDrawerIndicatorEnabled(false);` (5认同)
  • @Floss谢谢你,setDrawerIndicatorEnabled(false/true); 解决了我的问题,根据我的要求将主页按钮设置为一致的"后退"和(打开抽屉/关闭抽屉). (2认同)

jia*_*hao 30

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

覆盖pre-v11设备的实际样式.

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

<resources>
    <style name="MyCustomTheme" parent="Theme.Sherlock.Light">
    <item name="homeAsUpIndicator">@drawable/ic_home_up</item>
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

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

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

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

创建一个名为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>
Run Code Online (Sandbox Code Playgroud)

请注意,样式的名称必须与默认值文件夹中的文件相同,而不是项目homeAsUpIndicator,它名为android:homeAsUpIndicator.

项目问题是因为对于具有API 11或更高版本的设备,Sherlock Action Bar使用Android附带的默认Action Bar,其键名为android:homeAsUpIndicator.但对于API 10或更低版本的设备,Sherlock Action Bar使用自己的ActionBar,其中home作为向上指示器称为简单的"homeAsUpIndicator".

在清单中使用新主题

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/MyCustomTheme" >
Run Code Online (Sandbox Code Playgroud)

  • 如果您正在寻找已经可用的全息图标,您可以尝试@ drawable/abc_ic_ab_back_holo_light或@ drawable/abc_ic_ab_back_holo_dark. (2认同)

duv*_*eck 25

更改后退导航图标因ActionBar和工具栏而异.

对于ActionBar覆盖homeAsUpIndicator属性:

<style name="CustomThemeActionBar" parent="android:Theme.Holo">
    <item name="homeAsUpIndicator">@drawable/ic_nav_back</item>
</style>
Run Code Online (Sandbox Code Playgroud)

对于工具栏覆盖navigationIcon属性:

<style name="CustomThemeToolbar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="navigationIcon">@drawable/ic_nav_back</item>
</style>
Run Code Online (Sandbox Code Playgroud)


Wal*_*lil 19

我做了以下代码onCreate()并与我合作

getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);
Run Code Online (Sandbox Code Playgroud)


Ogu*_*can 5

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

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

app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
Run Code Online (Sandbox Code Playgroud)

如果你使用的是dark.actionBar你的后退按钮将是白色的,如果你使用轻型动作栏主题它将是黑色的.

  • colorControlNormal和android:textColorSecondary值负责,但我不确定这些值还会改变什么.您可以通过在工具栏主题上定义这些值来尝试自己. (2认同)
  • 使用"ThemeOverlay.AppCompat.Light"作为父级的自定义主题.这可能会奏效. (2认同)