如何使工具栏透明?
这是自我问答的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议的点是
- 只要确保您使用RelativeLayout来放置工具栏和正文。
- 把工具栏放在最后。
- 为工具栏的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>