如何使工具栏透明?

这是自我问答的post我有透明的ActionBar覆盖布局。 迁移到最新的支持库后,我不得不通过工具栏删除操作栏。 旧的方法使其透明和覆盖布局不起作用

<style name="CustomActionBarTheme" parent="@android:style/Theme.AppCompat"> <item name="android:windowActionBarOverlay">true</item> <item name="windowActionBarOverlay">true</item> <item name="android:actionBarStyle">@style/TransparentActionBar</item> </style> <style name="TransparentActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:background">@android:color/transparent</item> </style> 

您只需要定义隐藏操作栏的主题,使用透明背景定义操作栏风格,并将此样式设置为工具栏小部件。 请注意,工具栏应绘制为最后一个视图(在所有视图树上)

 <style name="Theme.Custom" parent="@android:style/Theme.AppCompat"> <item name="windowActionBar">false</item> <item name="windowActionBarOverlay">true</item> <item name="android:windowActionBarOverlay">true</item> </style> <style name="CustomActionBar" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:windowActionBarOverlay">true</item> <!-- Support library compatibility --> <item name="windowActionBarOverlay">true</item> </style> 

布局:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Toolbar should be above content--> <include layout="@layout/toolbar" /> </RelativeLayout> 

工具栏布局:

 <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" app:theme="@style/CustomActionBar"/> 

用AppBarLayout的背景创build你的toolbar.xml 文件@null

 <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.AppBarLayout android:id="@+id/general_appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@null" xmlns:android="http://schemas.android.com/apk/res/android"> <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="Login" android:textSize="20sp"/> </android.support.v7.widget.Toolbar> </android.support.design.widget.AppBarLayout> 

这里是结果:

在这里输入图像描述

工具栏就像一个视图,所以答案很简单。

 toolbar.getBackground().setAlpha(0); 

检查Google的示例源代码我发现如何使工具栏完全透明。 这比我想象的更简单。 我们只需要像这样创build一个简单的Shape drawable。

drawable的名字是toolbar_bg

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <gradient android:angle="90" android:startColor="@android:color/transparent" android:endColor="@android:color/transparent" android:type="linear" /> </shape> 

然后在片段或活动中。像这样添加工具栏。

  <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:background="@drawable/toolbar_bg" android:popupTheme="@style/ThemeOverlay.AppCompat.Light" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

在这里,我们将有一个完全透明的工具栏。

在这里输入图像描述

如果你这样做,不要添加<android.support.design.widget.AppBarLayout > ,这是行不通的。

注意:如果您需要AppBarLayout,请将高程设置为0,以避免绘制阴影。

在style.xml中添加以下行

 <style name="Base.Theme.AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <style name="AppTheme" parent="Base.Theme.AppTheme"> </style> 

现在在style-v21中添加以下行,

  <style name="AppTheme" parent="Base.Theme.AppTheme"> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@android:color/transparent</item> </style> 

并将主题设置为android:theme =“@ style / AppTheme”

这将使状态栏透明。

只需使用下面的xml代码:

代码布局:

 <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/def_toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="@color/toolbarTransparent" android:layout_alignParentTop="true" /> 

并在colors.xml中添加以下代码:

 <color name="toolbarTransparent">#00FFFFFF</color> 

这会给你想要的输出。

也许你需要看看这个贴子透明的ActionBar AppCompat-v7 21

这个postbuild议的点是

  1. 只要确保您使用RelativeLayout来放置工具栏和正文。
  2. 把工具栏放在最后。
  3. 为工具栏的android:background属性添加透明颜色

这应该没有太多的麻烦解决问题。

将工具栏透明化的最简单方法是在@colors部分定义不透明度,在@styles部分定义TransparentTheme,然后将这些定义放在工具栏中。

@ colors.xml

 <color name="actionbar_opacity">#33000000</color> 

@ styles.xml

 <style name="TransparentToolbar" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:windowActionBarOverlay">true</item> <item name="windowActionBarOverlay">true</item> </style> 

@ activity_main.xml中

 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:background="@color/actionbar_opacity" app:theme="@style/TransparentToolbar" android:layout_height="?attr/actionBarSize"/> 

结果是:

截图透明工具栏

只需在你的appbar布局中添加android:background="@android:color/transparent"就可以了

 <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/transparent"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout>` 

我通过创build两个Theme.AppCompat.Light.NoActionBar主题并将colorPrimary属性设置为透明颜色来实现半透明工具栏。

1)创build两个主题用不透明的工具栏创build一个主题:

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Toolbar background color --> <item name="colorPrimary">#ff212cff</item> </style> 

透明/覆盖的第二个主题工具栏:

 <style name="AppTheme.Overlay" parent="AppTheme"> <item name="colorPrimary">@color/transparent</item> </style> 

2)在您的活动布局中,将工具栏放在内容后面,以便显示在其前面:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <fragment android:id="@+id/container" android:name="com.test.CustomFragment" android:layout_width="match_parent" android:layout_height="match_parent"/> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> </RelativeLayout> 

3)在AndroidManifest.xml中将透明主题应用于您的活力

  <activity android:name="com.test.TransparentActivity" android:parentActivityName="com.test.HomeActivity" android:theme="@style/AppTheme.Overlay" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.test.HomeActivity" /> </activity> 

我知道晚会太晚了。 我创build了一个简单的类来pipe理Toolbar透明度。

 import android.annotation.SuppressLint; import android.graphics.drawable.ColorDrawable; import android.support.v7.widget.Toolbar; public class TransparentToolbarManager { private Toolbar mToolbar; private ColorDrawable colorDrawable; public static final int MAX_ALPHA = 255, MIN_ALPHA = 0; public TransparentToolbarManager(Toolbar mToolbar) { this.mToolbar = mToolbar; this.colorDrawable = new ColorDrawable(mToolbar.getContext().getResources().getColor(R.color.colorPrimary)); } public TransparentToolbarManager(Toolbar mToolbar, ColorDrawable colorDrawable) { this.mToolbar = mToolbar; this.colorDrawable = colorDrawable; } //Fading toolbar public void manageFadingToolbar(int scrollDistance) { if (mToolbar != null && colorDrawable != null) { //FadeinAndOut according to the horizontal scrollValue if (scrollDistance <= MAX_ALPHA && scrollDistance >= MIN_ALPHA) { setToolbarAlpha(scrollDistance); } else if (scrollDistance > MAX_ALPHA) { setToolbarAlpha(MAX_ALPHA); } } } @SuppressLint("NewApi") public void setToolbarAlpha(int i) { colorDrawable.setAlpha(i); if (CommonHelper.isSupport(16)) { mToolbar.setBackground(colorDrawable); } else { mToolbar.setBackgroundDrawable(colorDrawable); } } } 

和CommonHelper.isSupport()

 public static boolean isSupport(int apiLevel) { return Build.VERSION.SDK_INT >= apiLevel; } 

尝试下面的代码

 <android.support.design.widget.AppBarLayout android:id="@+id/app_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.Transparent" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> 

style.xml

 <style name="AppTheme.Transparent" parent="ThemeOverlay.AppCompat.Light"> <item name="colorPrimary">@android:color/transparent</item> <item name="colorControlActivated">@color/colorWhite</item> <item name="colorControlNormal">@color/colorWhite</item> </style>