我使用Android Studio创建了一个“基本活动”,并尝试使用toolbar-not-showing-elevation-in-android-9-api-28的答案在API 28 Pixel设备上创建高程阴影。但是,没有显示高程阴影。 activity_main.xml
文件当前为:
<androidx.coordinatorlayout.widget.CoordinatorLayout
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"
tools:context=".MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:elevation="0dp"
android:theme="@style/AppTheme.AppBarOverlay">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:elevation="16dp"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</com.google.android.material.appbar.AppBarLayout>
<include layout="@layout/content_main"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_dialog_email"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
为什么阴影在Toolbar
上不再起作用?
答案 0 :(得分:1)
使用您提供的XML,将android:clipChildren="false"
添加到 CoordinatorLayout 。这将允许在 AppBarLayout 的边界之外绘制阴影。
XML现在看起来像这样(在这里简化):
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:clipChildren="false">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="16dp"
app:title="The Toolbar"
app:titleTextColor="@android:color/white" />
</com.google.android.material.appbar.AppBarLayout>
这真的足以显示阴影。我在这里遇到的问题是,API 28和29上的阴影 so 很模糊,无法与工具栏区分开来。
要使阴影更加可见,请为v28创建样式文件,并将以下内容添加到应用程序的主题中:
<item name="android:spotShadowAlpha">0.5</item>
似乎默认的alpha值太微弱,无法轻易看到。此值可解决问题。
"Playing with elevation in Android (part 1)"很好地解释了这个问题。
现在在API 29仿真器上,布局看起来像这样:
答案 1 :(得分:0)
您可以将elevation
的{{1}}设置为阴影。
示例(在示例中,我为AppBarLayout
设置marginEnd和白色,只是为了轻松看到阴影)
Toolbar
我在Pixel模拟器(android 9),华为设备(android 8)上进行了测试,并且可以正常工作(阴影显示)。
我认为,如果父<com.google.android.material.appbar.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:elevation="16dp"
android:layout_marginEnd="50dp"
android:theme="@style/AppTheme.AppBarOverlay">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="#fff"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</com.google.android.material.appbar.AppBarLayout>
的宽度高度等于孩子,则不会显示孩子的阴影。我尝试使用其他ViewGroup
(例如ViewGroup
,ContrainstLayout
)来处理您的案件,并得到相同的行为。