【问题标题】:Changing Background and text color of AppCompat Light DarkActionBar Theme on android更改 Android 上 AppCompat Light DarkActionBar 主题的背景和文本颜色
【发布时间】:2015-04-30 02:07:34
【问题描述】:

我的应用使用了 AppCompat Light DarkActionBar 主题。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">        
</style>

是否可以更改此 ActionBar 的背景颜色和文本颜色?如果是,如何?

【问题讨论】:

标签: android customization android-theme android-appcompat


【解决方案1】:

以下代码将允许您完全设置操作栏的样式。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="actionBarStyle">@style/Widget.AppTheme.ActionBar</item>
    <item name="actionBarTheme">@style/ThemeOverlay.AppTheme.ActionBar</item>
    <item name="actionBarPopupTheme">@style/ThemeOverlay.AppTheme.PopupMenu</item>
</style>

覆盖操作栏样式以更改背景颜色或高度。

<style name="Widget.AppTheme.ActionBar" parent="Widget.AppCompat.ActionBar.Solid">
    <!-- action bar background - without android prefix -->
    <item name="background">...</item>
    <!-- action bar elevation - without android prefix -->
    <item name="elevation">4dp</item>
</style>

覆盖操作栏主题以定义操作栏内所有视图的特殊行为,例如操作项、波纹背景颜色、文本颜色。

<style name="ThemeOverlay.AppTheme.ActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <!-- title text color -->
    <item name="android:textColorPrimary">...</item>
    <!-- subtitle text color -->
    <item name="android:textColorSecondary">?android:textColorPrimary</item>
    <!-- action menu item text color -->
    <item name="actionMenuTextColor">?android:textColorPrimary</item>
    <!-- action menu item icon color -->
    <item name="colorControlNormal">?android:textColorPrimary</item>
</style>

您还可以更改弹出主题。

<style name="ThemeOverlay.AppTheme.PopupMenu" parent="ThemeOverlay.AppCompat.Dark">
    <!-- popup menu background - NEVER "android:background" !!! in themes -->
    <item name="android:colorBackground">...</item>
    <!-- popup menu item text color -->
    <item name="android:textColorPrimary">...</item>
</style>

另一方面,以下代码将允许您设置窗口的样式。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- window background - NEVER "android:background" in themes !!! -->
    <item name="android:windowBackground">...</item>
    <item name="android:textColorPrimary">...</item>
    <item name="android:textColorSecondary">...</item>
</style>

您还可以直接更改操作栏上的文本颜色。 但要小心!这不会影响菜单项或图标的文本颜色或波纹颜色!从长远来看,这可能不是您想要的。

<style name="Widget.AppTheme.ActionBar" parent="Widget.AppCompat.ActionBar.Solid">
    <!-- title text color -->
    <item name="titleTextColor">?android:textColorPrimary</item>
    <!-- subtitle text color -->
    <item name="subtitleTextColor">?android:textColorSecondary</item>
</style>

【讨论】:

  • 为什么像更改标题颜色这样简单的事情必须如此复杂?我不知道有多少Android开发者真正理解这个xml中的细分
  • 感谢@EugenPechanec。改变statusBar的颜色怎么样?
  • @Antonio 您好,在提出问题之前,请始终使用搜索栏。其他人可能已经问过同样的问题(在这种情况下他们已经问过)。
  • 谢谢,@EugenPechanec。实际上,它旨在建议您将其添加到您的答案中并获得更完整的答案:)
  • 嗨@EugenPechanec:谢谢你的回答,你能解释一下“懒惰和糟糕的方式......当你改变配色方案时会破坏的”是什么意思?我不确定在哪种情况下会中断。
【解决方案2】:

是的,可以更改操作栏上文本的颜色。将此添加到您的活动的 onCreate 中:

 actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2014-11-22
    相关资源
    最近更新 更多