appcompat v7 23,操作栏,透明度
appcompat v7 23, actionbars, transparency
我想我已经竭尽全力寻找答案了。我想我被 Android L 控制了......似乎无论我做什么,操作栏的背景仍然默认为 colorPrimary
layout.xml
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dl_main"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.CoordinatorLayout
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.farmdog.farmdog.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_anchor="@+id/appbar"
app:layout_anchorGravity="top"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<!--layout_behavior="TransparentScrollingViewBehavior"/>-->
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!--android:theme="@style/AppTheme.AppBarOverlay">-->
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
app:layout_scrollFlags="scroll|enterAlways"/>
<!--android:background="?attr/colorPrimaryDark"-->
<!--app:theme="@style/AppTheme.AppBarOverlay">-->
<!--android:layout_height="?attr/actionBarSize"-->
<!--app:popupTheme="@style/AppTheme.PopupOverlay"-->
</android.support.design.widget.AppBarLayout>
........
和styles.xml (v21)
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<!-- colorPrimaryDark wont work on API level < 21 -->
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowBackground">@color/mainBkgndHard</item>
<item name="android:textColor">@color/appTextColor</item>
<item name="android:buttonStyle">@style/ButtonTheme</item>
<!--<item name="android:fitsSystemWindows">true</item> hmmm, primaryColor expands on the statusbar now...-->
<!-- attempt taking actionbar shadow away -->
<item name="elevation">0dp</item>
<item name="android:windowContentOverlay">@null</item>
<!-- the following line breaks the build-->
<!--<item name="windowContentOverlay">@null</item>-->
<!-- attempt drawing underneath the actionbar - all fail as of 'com.android.support:appcompat-v7:23.1.1.'-->
<item name="windowActionBarOverlay">true</item>
<item name="actionBarStyle">@style/MyActionBar</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
<!--<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">-->
<!--<item name="android:background">@color/colorActionBar</item>-->
<!--<item name="background">@color/colorActionBar</item>-->
<!--<item name="windowActionBarOverlay">true</item>-->
<!--<item name="android:windowActionBarOverlay">true</item>-->
<!--</style>-->
<style name="MyActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid">
<item name="android:background">@color/colorActionBar</item>
<!--For compatibility-->
<item name="background">@color/colorActionBar</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
</resources>
我认为你做错了way.I意思是,下面的Toolbar没有任何PrimaryColor或者甚至背景:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
app:layout_scrollFlags="scroll|enterAlways"/>
<!--android:background="?attr/colorPrimaryDark"-->
<!--app:theme="@style/AppTheme.AppBarOverlay">-->
<!--android:layout_height="?attr/actionBarSize"-->
<!--app:popupTheme="@style/AppTheme.PopupOverlay"-->
因此,这仅适用于没有任何背景或 PrimaryColor
的 (v21) 版本。如您所见,工具栏 将与您的 Activity Theme
其中有:
<item name="colorPrimary">@color/colorPrimary</item>
搭配:
Theme.AppCompat.Light.DarkActionBar
而且,如果您不设置任何背景颜色或 PrimaryColor,因为:
Theme.AppCompat.Light.DarkActionBar
和你的Toolbar
,它必须是那样:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
否则,它应该会崩溃(我猜,不确定),因为你有一个带有 DarkActionBar
的主题和一个没有背景的工具栏。
我认为这是问题所在!
编辑:
为了完成答案,由于这段代码很简单,所以我将其添加到这里:
也将此添加到您的 AppBarLayout
:
android:theme
受莫森回答的启发,我做了以下事情:
与父 Theme.AppCompat.Light.NoActionBar
定义了名为 AppTheme 的主题
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
在AndroidManifest.xml中,我将AppTheme指定为android:theme
android:theme="@style/AppTheme"
为 AppBarLayout 创建了另一个名为 CollapsingToolbarTheme 的主题 Theme.AppCompat.Light.NoActionBar
<item name="colorPrimary">@color/transparent</item>
<item name="colorPrimaryDark">@color/dark</item>
<item name="colorAccent">@color/colorAccent</item>
最后,我指定了新的CollapsingToolbarTheme作为AppBarLayout
的主题
android:theme="@style/CollapsingToolbarTheme"
我想我已经竭尽全力寻找答案了。我想我被 Android L 控制了......似乎无论我做什么,操作栏的背景仍然默认为 colorPrimary
layout.xml
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dl_main"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.CoordinatorLayout
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.farmdog.farmdog.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_anchor="@+id/appbar"
app:layout_anchorGravity="top"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<!--layout_behavior="TransparentScrollingViewBehavior"/>-->
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!--android:theme="@style/AppTheme.AppBarOverlay">-->
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
app:layout_scrollFlags="scroll|enterAlways"/>
<!--android:background="?attr/colorPrimaryDark"-->
<!--app:theme="@style/AppTheme.AppBarOverlay">-->
<!--android:layout_height="?attr/actionBarSize"-->
<!--app:popupTheme="@style/AppTheme.PopupOverlay"-->
</android.support.design.widget.AppBarLayout>
........
和styles.xml (v21)
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<!-- colorPrimaryDark wont work on API level < 21 -->
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowBackground">@color/mainBkgndHard</item>
<item name="android:textColor">@color/appTextColor</item>
<item name="android:buttonStyle">@style/ButtonTheme</item>
<!--<item name="android:fitsSystemWindows">true</item> hmmm, primaryColor expands on the statusbar now...-->
<!-- attempt taking actionbar shadow away -->
<item name="elevation">0dp</item>
<item name="android:windowContentOverlay">@null</item>
<!-- the following line breaks the build-->
<!--<item name="windowContentOverlay">@null</item>-->
<!-- attempt drawing underneath the actionbar - all fail as of 'com.android.support:appcompat-v7:23.1.1.'-->
<item name="windowActionBarOverlay">true</item>
<item name="actionBarStyle">@style/MyActionBar</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
<!--<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">-->
<!--<item name="android:background">@color/colorActionBar</item>-->
<!--<item name="background">@color/colorActionBar</item>-->
<!--<item name="windowActionBarOverlay">true</item>-->
<!--<item name="android:windowActionBarOverlay">true</item>-->
<!--</style>-->
<style name="MyActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid">
<item name="android:background">@color/colorActionBar</item>
<!--For compatibility-->
<item name="background">@color/colorActionBar</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
</resources>
我认为你做错了way.I意思是,下面的Toolbar没有任何PrimaryColor或者甚至背景:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
app:layout_scrollFlags="scroll|enterAlways"/>
<!--android:background="?attr/colorPrimaryDark"-->
<!--app:theme="@style/AppTheme.AppBarOverlay">-->
<!--android:layout_height="?attr/actionBarSize"-->
<!--app:popupTheme="@style/AppTheme.PopupOverlay"-->
因此,这仅适用于没有任何背景或 PrimaryColor
的 (v21) 版本。如您所见,工具栏 将与您的 Activity Theme
其中有:
<item name="colorPrimary">@color/colorPrimary</item>
搭配:
Theme.AppCompat.Light.DarkActionBar
而且,如果您不设置任何背景颜色或 PrimaryColor,因为:
Theme.AppCompat.Light.DarkActionBar
和你的Toolbar
,它必须是那样:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
否则,它应该会崩溃(我猜,不确定),因为你有一个带有 DarkActionBar
的主题和一个没有背景的工具栏。
我认为这是问题所在!
编辑:
为了完成答案,由于这段代码很简单,所以我将其添加到这里:
也将此添加到您的 AppBarLayout
:
android:theme
受莫森回答的启发,我做了以下事情:
与父 Theme.AppCompat.Light.NoActionBar
定义了名为 AppTheme 的主题<item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item>
在AndroidManifest.xml中,我将AppTheme指定为android:theme
android:theme="@style/AppTheme"
为 AppBarLayout 创建了另一个名为 CollapsingToolbarTheme 的主题 Theme.AppCompat.Light.NoActionBar
<item name="colorPrimary">@color/transparent</item> <item name="colorPrimaryDark">@color/dark</item> <item name="colorAccent">@color/colorAccent</item>
最后,我指定了新的CollapsingToolbarTheme作为AppBarLayout
的主题android:theme="@style/CollapsingToolbarTheme"