【问题标题】:Change ActionBar Tabs background color更改 ActionBar 选项卡的背景颜色
【发布时间】:2012-07-03 20:33:04
【问题描述】:

有没有一种方法可以改变ActionBar中标签栏的背景颜色而不用在单行版本中改变它?

澄清我想要什么:在纵向模式下,ActionBar 分为两行,ActionBar 本身和下面的选项卡。在横向模式下,选项卡位于实际的 ActionBar 中。

我想更改纵向模式的背景颜色。如果我更改 TabView 中的背景,两种模式都会更改。我是否必须为这些创建单独的样式?这就引出了第二个问题:有没有办法知道什么时候是两行,什么时候不是?

或者我只是错过了什么?

顺便说一句,我正在使用 ActionBarSherlock

【问题讨论】:

标签: android android-actionbar android-ui


【解决方案1】:

我认为您正在寻找 ActionBar 样式的android:backgroundStacked 属性:

<style name="MyTheme" parent="android:Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/MyActionBarStyle</item>
</style>

<style name="MyActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid">
    <item name="android:backgroundStacked">@drawable/my_stacked_background</item>
</style>

或(如果使用 ActionBarSherlock):

<style name="MyTheme" parent="@style/Theme.Sherlock.Light">
    <item name="android:actionBarStyle">@style/MyActionBarStyle</item>
    <item name="actionBarStyle">@style/MyActionBarStyle</item>
</style>

<style name="MyActionBarStyle" parent="@style/Widget.Sherlock.Light.ActionBar.Solid">
    <item name="android:backgroundStacked">@drawable/my_stacked_background</item>
    <item name="backgroundStacked">@drawable/my_stacked_background</item>
</style>

【讨论】:

  • 您能否详细说明如何使用默认的全息光主题进行这项工作?你给它起什么名字?你在清单中叫什么?这不起作用。
  • @JesperB 为什么我们需要同时设置“android:backgroundStacked”和“backgroundStacked”?
【解决方案2】:

要更改操作栏选项卡的颜色,请使用以下代码:

//例如如果你想要白色作为Tabs背景,那么

getActionBar().setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#FFFFFF")));

【讨论】:

  • 这是一天后帮助我的一个答案。样式太复杂了。这是最简单的方法。
  • 为什么mActionBar.setStackedBackgroundDrawable(new ColorDrawable(R.color.action_bar_bg)); 不起作用?
【解决方案3】:

在 ActionBarSherlock 的values/abs__themes.xml 中有

<item name="actionModeSplitBackground">@drawable/abs__cab_background_bottom_holo_dark</item>

您必须创建自己的从 ABS 派生的主题

<style name="AppTheme" parent="Theme.Sherlock">
    <item name="actionBarStyle">@style/MyActionBar</item>
    <item name="android:actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="Widget.Sherlock.ActionBar">
    <item name="actionModeSplitBackground">@drawable/my_split_background</item>
</style>

希望对你有所帮助。

【讨论】:

  • 我认为可能是这样,但它并没有改变任何东西。
  • 你是否在AndroidManifest.xml中应用了这个主题?
  • 是的。但这是错误的值。如果您查看实际资产 (abs__cab_background_bottom_holo_dark),用于显示它被选中的蓝色条位于顶部,而不是底部。选择/未选择等也没有不同的模式
  • 好的,values/abs__styles.xml中也有&lt;item name="backgroundSplit"&gt;@drawable/abs__ab_bottom_transparent_dark_holo&lt;/item&gt;。我不记得确切的项目名称,但你必须往那个方向看
  • 背景堆叠!感谢您引导我走向正确的方向。
【解决方案4】:
ColorDrawable colorDrawable = new ColorDrawable(Color.White);
actionBar.SetStackedBackgroundDrawable(colorDrawable);

对于 xamarin 人。

【讨论】:

  • 稍微解释一下会改进这个答案。
【解决方案5】:

要根据方向分离样式,您必须在 /res 文件夹中创建一个名为 layout-land(横向模式)和 layout-port(纵向模式)的新文件夹,并将您的 xml 文件放入操作栏并设置它是每个文件夹上的特定样式(带有您想要的颜色)。

【讨论】:

  • 谢谢,我知道了。但这不仅仅是风景/肖像。我假设在平板电脑上它总是只有一条线。我知道我也可以为大屏幕等设置单独的样式,但我不知道在哪种配置中将使用哪种模式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多