You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android 9(API 28)中Toolbar不显示阴影问题求助

解决Android 9 Pie上Toolbar阴影不显示的问题

我来帮你搞定这个Toolbar阴影消失的问题!针对Android 9 Pie(API 28)的特性,结合你的布局代码,这里有几个可行的解决方案:

1. 调整fitsSystemWindows属性的位置

你的DrawerLayout设置了android:fitsSystemWindows="true",这会导致内部Toolbar的阴影被父布局的边界截断。建议把这个属性移到内部的LinearLayout上,同时移除DrawerLayout的该属性,额外添加android:clipChildren="false"确保阴影可以超出父布局边界显示:

修改后的activity_main.xml代码:

<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:openDrawer="start" >

    <LinearLayout 
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:clipChildren="false">

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

        <FrameLayout 
            android:id="@+id/fragment_main"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

    <include layout="@layout/navigation_drawer" />
</androidx.drawerlayout.widget.DrawerLayout>

2. 代码中动态设置Toolbar的Elevation

有时候XML中直接设置elevation在Android 9上可能不生效,试试在Activity的onCreate方法中动态设置:

import android.os.Build;
import androidx.appcompat.widget.Toolbar;

// ...

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // 用dp转像素确保适配不同屏幕
    float elevation = getResources().getDimensionPixelSize(R.dimen.toolbar_elevation);
    toolbar.setElevation(elevation);
}

记得在res/values/dimens.xml中添加对应的尺寸:

<dimen name="toolbar_elevation">4dp</dimen>

3. 检查主题设置是否影响阴影

如果你的App主题设置了透明状态栏(比如android:statusBarColor="@android:color/transparent"),可能会挤压Toolbar的阴影空间。可以尝试给Toolbar添加顶部内边距:

<androidx.appcompat.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:elevation="4dp"
    android:paddingTop="@dimen/status_bar_padding">
</androidx.appcompat.widget.Toolbar>

并在res/values/dimens.xml中定义基础值:

<dimen name="status_bar_padding">0dp</dimen>

res/values-v21/dimens.xml中适配状态栏高度:

<dimen name="status_bar_padding">24dp</dimen>

优先尝试第一个方案,这是Android 9上Toolbar阴影消失最常见的解决办法,一般调整后就能看到阴影啦!

内容的提问来源于stack exchange,提问作者Akshdeep Singh

火山引擎 最新活动