工具栏 xml 阴影(高度)只能在 Android 21+ 上运行

Posted

技术标签:

【中文标题】工具栏 xml 阴影(高度)只能在 Android 21+ 上运行【英文标题】:Toolbar xml shadow (elevation) can get working only on Android 21+ 【发布时间】:2019-08-15 02:18:50 【问题描述】:

所以我添加了导航抽屉,因此我必须在我的布局 xml 文件中使用工具栏(而不是使用带有操作栏的主题 Theme.AppCompat.Light.DarkActionBar,现在是 Theme.AppCompat.Light.NoActionBar

<com.google.android.material.appbar.AppBarLayout
    android:layout_
    android:layout_>

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_
        android:layout_
        android:background="?attr/colorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar"/>

</com.google.android.material.appbar.AppBarLayout>

我找到了在工具栏下方添加阴影的答案 (AppBarLayout) https://***.com/a/31026359/9766649

但它仅适用于 Android 21+

Theme.AppCompat.Light.DarkActionBar shadow 适用于旧版 Android

所以唯一的解决方案是使用像https://***.com/a/26904102/9766649 这样的自定义阴影?

【问题讨论】:

【参考方案1】:

我决定为新旧 Android 使用不同的实现

对于 Android 21+ (layout-v21/activity_main.xml):

<LinearLayout
    android:orientation="vertical"
    android:layout_
    android:layout_>

    <com.google.android.material.appbar.AppBarLayout
        android:layout_
        android:layout_
        xmlns:android="http://schemas.android.com/apk/res/android">

        <include layout="@layout/toolbar_view"/>

    </com.google.android.material.appbar.AppBarLayout>

    <include layout="@layout/content"/>

</LinearLayout>

对于旧版 Android (layout/activity_main.xml):

<LinearLayout
    android:orientation="vertical"
    android:layout_
    android:layout_>

    <include layout="@layout/toolbar_view"/>

    <FrameLayout android:layout_
                 android:layout_>

        <include layout="@layout/content"/>

        <View android:layout_
              android:layout_
              android:background="@drawable/drop_shadow"/>

    </FrameLayout>

</LinearLayout>

toolbar_view.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_
    android:layout_
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppTheme.ActionBar"
    xmlns:android="http://schemas.android.com/apk/res/android"/>

drawable/drop_shadow.xml(在旧版 Android 的工具栏下方添加高度):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">

    <gradient android:startColor="@android:color/transparent"
              android:endColor="#88666666"
              android:angle="90"/>

</shape>

【讨论】:

以上是关于工具栏 xml 阴影(高度)只能在 Android 21+ 上运行的主要内容,如果未能解决你的问题,请参考以下文章

在棒棒糖前设备的工具栏上添加高程/阴影

Android LinearLayout:在 LinearLayout 周围添加带阴影的边框

Android中实现popupwindow(全屏+阴影+动画)

在android xml中获取透明椭圆形下方的阴影

用于Android的xml中的梯形阴影

按钮上的阴影颜色取决于 XML 中的状态 - Android