透明操作栏:自定义tabcolor
我想创build一个带有#3b000000
透明标签的ActionBar。 就像这样,但是在ActionBar下面有一些标签:
这是我在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本身确实显示透明backgroundcolor,但标签是完全透明的(没有颜色可见)。
我该如何解决这个问题?
在您的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的自定义testing图标,也就是没有透明度)。
我已经做了一个项目,风格是这样的:
<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>
正如本文所提到的,使用以下自定义主题完美无瑕。
<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")));
这是我完全透明的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>
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>
要将任何主题操作栏设置为透明的背景图片或颜色,应该显示为实现它的最佳最简单的方法。
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);
ActionBar actionBar = getSupportActionBar(); actionBar.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
它为我工作得很好
对于使ActionBar
透明的情况,这工作正常。
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#330000ff"))); getSupportActionBar().setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#550000ff")));
<!-- 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>
颜色/操作栏和颜色/标签栏颜色值是透明的
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:actionBarStyle">@style/MyActionBar</item> <item name="android:windowActionBarOverlay">true</item> <!--For compatibility--> <item name="actionBarStyle">@style/MyActionBar</item> <item name="windowActionBarOverlay">true</item> </style> <color name="transparent_black">#30000000</color> <style name="MyActionBar" parent="Widget.AppCompat.ActionBar.Solid"> <item name="android:background">@color/transparent_black</item> <!--For compatibility--> <item name="background">@color/transparent_black</item> </style>