自定义Actionbar的风格

本文介绍了如何使用Android的样式和主题资源为Actionbar自定义风格,包括背景、文本颜色等,以适应不同应用的定位。通过调整内置主题或创建自定义主题,开发者可以实现个性化的Actionbar外观。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义Actionbar的风格

前言:

Action bar 为用户提供一种熟悉可预测的方式来展示操作和导航,但是这并不意味着我们的 app 要看起来和其他 app 一样。如果想将 action bar 的风格设计的合乎我们产品的定位,只需简单地使用 Android 的 样式和主题 资源。就可以达到我们想要的app风格。

Android 包括一少部分内置的 activity 主题,这些主题中包含 “dark” 或 “light” 的 action bar 样式。我们也可以通过扩展这些主题,以便于更好的为 action bar 自定义外观。

注意:
如果我们为 action bar 使用了 Support 库的 API,那我们必须使用(或重写) Theme.AppCompat 家族样式(甚至 Theme.Holo 家族,在 API level 11 或更高版本中可用)。
如此一来,声明的每一个样式属性都必须被声明两次:

  • 一次使用系统平台的样式属性(android: 属性)
  • 另一次使用 Support 库中的样式属性(appcompat.R.attr 属性 - 这些属性的上下文其实就是我们的 app)。更多细节请查看下面的示例
使用一个 Android 主题

Android 包含两个基本的 activity 主题,这两个主题决定了 action bar 的颜色:

  • Theme.Holo,一个 “dark” 的主题(黑色)
  • Theme.Holo.Light,一个 “light” 的主题(白色,高亮度)

这些主题即可以被应用到 app 全局,也可以通过在 manifest 文件中设置 <application> 元素 或 <activity> 元素的 android:theme 属性,对单一的 activity 进行设置。

如图:Theme.Holo

如图:Theme.Holo

如图:Theme.Holo.Light

这里写图片描述

例如:

<application android:theme="@android:style/Theme.Holo.Light" ... />

可以通过声明 activity 的主题为 Theme.Holo.Light.DarkActionBar 来达到如下效果:action bar 为dark,其他部分为light。

这里写图片描述

当使用 Support 库时,必须使用 Theme.AppCompat 主题替代:

  • Theme.AppCompat,一个“dark”的主题
  • Theme.AppCompat.Light,一个“light”的主题
  • Theme.AppCompat.Light.DarkActionBar,一个带有“dark” action bar 的“light”主题
自定义背景

为改变 action bar的背景,可以通过为 activity 创建一个自定义主题,并重写 actionBarStyle 属性来实现。然后在actionBarStyle 属性指向另一个样式;在该样式里,通过指定一个 drawable 资源来重写 background 属性。

例子如图:

这里写图片描述
如果我们的 app 使用了 navigation tabs 或 split action bar ,也可以通过分别设置 backgroundStackedbackgroundSplit 属性来为这些条指定背景。

Note:
为自定义主题和样式声明一个合适的父主题,这点很重要。如果没有父样式,action bar将会失去很多默认的样式属性,除非我们自己显式的对他们进行声明。

当仅支持 Android 3.0 或更高的版本时

当仅支持 Android 3.0 和更高版本时,可以通过如下方式定义 action bar 的背景:

res/values/themes.xml
<?xml version="1.0" encoding="utf-8"?>
<!--为改变actionbar的背景-->
<resources>
<!-- 自定义的应用于application或者activity的主题 -->
    <style name="CustomTheme"
        parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/myActionbarTheme</item>
    </style>
<!-- ActionBar 样式 -->
    <style name="myActionbarTheme"
        parent="android:Widget.Holo.Light.ActionBar.Solid.Inverse">
      <item name="android:background">@drawable/abc_ic_search_api_mtrl_alpha</item>
    </style>
</resources>

然后,将主题应用到 app 全局或单个的 activity 之中:

<application android:theme="@style/CustomActionBarTheme" ... />
自定义文本颜色

修改 action bar 中的文本颜色,需要分别设置每个元素的属性:

  • Action bar 的标题:创建一种自定义样式,并指定 textColor 属性;同时,在自定义的 actionBarStyle 中为 titleTextStyle 属性指定为刚才的自定义样式。
  • Action bar tabs:在 activity 主题中重写 actionBarTabTextStyle
  • Action 按钮:在 activity 主题中重写 actionMenuTextColor
当支持 Android 3.0 和更高

当仅支持 Android 3.0 和更高时,样式 XML 文件应该是这样的:

res/values/themes.xml
<?xml version="1.0" encoding="utf-8"?>
<!--第二个CustomTheme-->
<resources>
    <!-- 应用于程序或者活动的主题 -->
    <style name="appCustomTheme"
        parent="android:Theme.Holo">
    <item name="android:actionBarStyle">@style/MyActionbar</item>
    <item name="android:titleTextStyle">@style/ActionbarTitleText</item>
        <item name="android:actionMenuTextColor">@color/accent_material_light</item>
    </style>
    <!--actionbar 样式-->
    <style name="MyActionbar"
        parent="android:Widget.Holo.ActionBar">
        <item name="android:titleTextStyle">@style/ActionbarTitleText</item>
    </style>
    <!--actionbar标题文本-->
    <style name="ActionbarTitleText"
        parent="android:TextAppearance.Holo.Widget.ActionBar.Title">
        <item name="android:textColor">@color/accent_material_light</item>
    </style>
    <!--actionbar tab标签的文本样式-->
    <style name="ActionbarTabText"
        parent="android:Widget.Holo.ActionBar.TabText">
        <item name="android:textColor">@color/accent_material_light</item>
    </style>
</resources>

待续……

参考网址:
http://hukai.me/android-training-course-in-chinese/basics/actionbar/styling.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值