透明ActionBar:自定义选项卡颜色

62

我想创建一个带有标签的ActionBar,标签要透明,颜色为 #3b000000。类似于这样的效果,但是标签应该在 ActionBar 下面:

enter image description here

这是我在 styles.xml 中使用的代码:

<style name="Theme.MyTheme" parent="@style/Theme.Sherlock.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/ActionBar</item>
    <item name="windowActionBarOverlay">true</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="actionBarStyle">@style/ActionBar</item>
</style>

<style name="ActionBar" parent="@style/Widget.Sherlock.Light.ActionBar">
    <item name="android:background">@color/actionbar</item>
    <item name="background">@color/actionbar</item>
    <item name="android:actionBarTabStyle">@style/ActionBarTabStyle</item>
    <item name="actionBarTabStyle">@style/ActionBarTabStyle</item>
</style>

<style name="ActionBarTabStyle" parent="@style/Widget.Sherlock.ActionBar.TabView">
    <item name="background">@color/actionbar_tabs</item>
    <item name="android:background">@color/actionbar_tabs</item>
</style>

发生的情况是,ActionBar本身确实显示透明背景颜色,但选项卡完全透明(没有可见的颜色)。

我该如何解决这个问题?

9个回答

138

在您的 ActionBar 上调用 setStackedBackgroundDrawable()

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
ActionBar actionBar = getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#330000ff")));
actionBar.setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#550000ff")));

这里是一个例子,包含一些随机的图标和选项卡,以及两种不同的蓝色背景色来突出效果:

输入图像描述

(刷新图标是默认的,有轻微的透明度。其他图标是自定义测试图标,颜色为 #FFFFFFFF,即无透明度)。


我不想要菜单项,我想要透明的选项卡。 - nhaarman
@GunnarKarlsson 先生,我们如何使用Sherlock Action Bar实现这个? - Rat-a-tat-a-tat Ratatouille
11
对我来说没用。我没有使用getActionBar(),而是使用了getSupportActionBar()。我的工具栏是完全蓝色的,而不是半透明的。另外一个需要注意的是,getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 只能在API 11或以上的版本中使用。 - Pedro Romão
1
谢谢,伙计。它可以工作了,只需要通过代码设置背景。如果我在XML布局中设置背景,它将无法工作。 - W I Z A R D
1
在调用super.onCreate之前,您应该调用这个函数。 - Sam
显示剩余3条评论

12

我曾在一个项目中做过类似的事情,样式是这样的:

<style name="AppTheme" parent="android:Theme.Holo">
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:actionBarStyle">@style/action_bar_theme</item>
    <item name="android:actionMenuTextColor">#fff</item>
</style>

<style name="action_bar_theme" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:background">#b3000000</item>
    <item name="android:titleTextStyle">@style/action_bar_text</item>
</style>

你在哪里声明选项卡的颜色和透明度? - nhaarman
抱歉,在我的项目中没有选项卡。 - Marcio Covre

9

这篇文章所述,使用以下自定义主题可以完美地工作。

<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@android:style/Theme.Holo">
        <item name="android:windowActionBarOverlay">true</item>
    </style>
</resources>

要应用一些颜色色调,可以参考Gunnar的回答。

ActionBar actionBar = getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#330000ff")));
actionBar.setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#550000ff")));

如何使用 getSupportActionBar()? - Neon Warge

8
这是我用来实现完全透明的 Actionbar 的代码:

<!-- Base application theme. -->
<style name="TransparentTheme" parent="android:Theme.Holo.Light">
    <!-- Customize your theme here. -->
    <item name="android:windowBackground">@null</item>
    <item name="android:actionBarStyle">@style/ActionBarStyle.Transparent</item>
    <item name="android:windowActionBarOverlay">true</item>
</style>

<style name="ActionBarStyle.Transparent" parent="android:Widget.ActionBar">
    <item name="android:background">@null</item>
    <item name="android:displayOptions">showHome|showTitle</item>
    <item name="android:titleTextStyle">@style/ActionBarStyle.Transparent.TitleTextStyle</item>
</style>

<style name="ActionBarStyle.Transparent.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">@android:color/white</item>
</style>

enter image description here


4
             getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);//or add in style.xml
             ActionBar actionBar = getActionBar();

             ColorDrawable newColor = new ColorDrawable(getResources().getColor(R.color.action_bar_color));//your color from res
             newColor.setAlpha(128);//from 0(0%) to 256(100%)
             getActionBar().setBackgroundDrawable(newColor);

style.xml文件中

<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@android:style/Theme.Holo">
        <item name="android:windowActionBarOverlay">true</item>
    </style>
</resources>

0

要将任何主题的操作栏设置为透明背景图像或颜色,最好的、最简单的实现方法是显示它。

        actionBar.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(activity, android.R.color.transparent)));


    ImageView image = new ImageView(this);
    image.setTag(R.string.decore_view);
    image.setAdjustViewBounds(true);
    image.setScaleType(ImageView.ScaleType.CENTER_CROP);
    image.setLayoutParams(new ViewGroup.LayoutParams(-1, -1));
    image.setImageResource(R.drawable.home_bg);
    ((ViewGroup)((ViewGroup)getWindow().getDecorView())).addView(image, 0);

0

这对于使ActionBar透明在我的情况下运作良好。

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#330000ff")));
getSupportActionBar().setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#550000ff")));

0
ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

对我来说它很有效


-1

<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
    <item name="android:actionBarTabBarStyle">@style/MyActionBarTabBar</item>
    <item name="android:windowActionBarOverlay">true</item>
</style>

<style name="MyActionBar"
    parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
    <item name="android:background">@color/actionbar</item>
    <item name="android:backgroundStacked">@color/tabbar</item>


</style>

color/actionbar 和 color/tabbar 的颜色值是透明的


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接