【问题标题】:appcompat v7 23, actionbars, transparencyappcompat v7 23,操作栏,透明度
【发布时间】:2016-01-13 13:27:37
【问题描述】:

我想我为了答案而全力以赴。我想我被 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>

【问题讨论】:

    标签: android android-layout android-5.0-lollipop android-actionbar-compat


    【解决方案1】:

    我认为你的做法是错误的。我的意思是,以下工具栏没有任何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
    

    【讨论】:

    • 在将其标记为绿色之前,您可能需要更改一些位:它是 AppBarLayout 需要 android:colorPrimary / colorPrimary 的那个。 (android:)background 在这种情况下没有任何作用,也不会崩溃:)
    • 哦,我是说你的问题,appbarlayout 很简单,你可以建议一个对你有用的编辑,顺便说一句。goodluck
    • 我在&lt;AppBarLayout/&gt;元素中添加了android:colorPrimaryandroid:colorPrimary属性
    • 已添加到答案中。
    【解决方案2】:

    受 Mohsen 回答的启发,我做了以下事情:

    • 使用父 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"

    • 使用父 Theme.AppCompat.Light.NoActionBar 为 AppBarLayout 创建了另一个名为 CollapsingToolbarTheme 的主题

      <item name="colorPrimary">@color/transparent</item>
      <item name="colorPrimaryDark">@color/dark</item>
      <item name="colorAccent">@color/colorAccent</item>
      
    • 最后,我指定了新的CollapsingToolbarTheme作为AppBarLayout的主题

      android:theme="@style/CollapsingToolbarTheme"

    【讨论】:

      猜你喜欢
      • 2014-12-14
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      相关资源
      最近更新 更多