ActionBarCompat和透明度

Cri*_*ero 11 android android-actionbar-compat

我想使支持库中的ActionBar完全透明,但是,由于背景堆栈,似乎更改背景drawable是不够的.如果你放置一个半透明的背景,你最后会得到它背后的默认背景.

有谁知道删除该背景的方法?

这是发生的事情:

动作条

背景drawable的代码:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#66336688"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

如您所见,drawable具有透明蓝色,与默认的灰色背景重叠.

Cri*_*ero 22

好的,我发现解决方案搞乱了SDK.看起来很简单,你需要做3件事:

  • 创建一个可绘制的背景,如我的问题所示.
  • 像这样创建一个ActionBar样式:

    <!-- Application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
    
        <!-- Support library compatibility -->
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>
    
    <!-- ACTION BAR STYLES -->
    <style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar">
        <item name="android:background">@drawable/actionbar_background</item>
        <item name="android:windowActionBarOverlay">true</item>
    
        <!-- Support library compatibility -->
        <item name="background">@drawable/actionbar_background</item>
        <item name="windowActionBarOverlay">true</item>
    </style>
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用Support方法对ActionBar overlay使用Window功能(忽略Eclipse关于常量的API级别的警告;我使用SuppressLint注释来删除警告):

    @SuppressLint("InlinedApi") @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
    setContentView(R.layout.activity_home);}
    
    Run Code Online (Sandbox Code Playgroud)


gle*_*oid 6

ChristianGuerrero回答很棒,但你应该直接把这个项目:

<item name="android:windowActionBarOverlay">true</item>
Run Code Online (Sandbox Code Playgroud)

在AppTheme风格内.然后,您不必在onCreate方法中添加任何内容.