关于Google Pixel,或者安卓16,状态栏颜色无法修改的解决方案
场景
- 谷哥手机pixel等原生安卓16的系统的状态栏异常显示,无法修改颜色
获取title布局(示例)
<?xml version="1.0" encoding="utf-8"?>
<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/layout_parent_head"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#ffffff"android:orientation="horizontal"><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/layout_head"android:layout_width="match_parent"android:layout_height="@dimen/layout_include_title_height"android:background="#ffffff"android:orientation="horizontal"><ImageViewandroid:id="@+id/back"android:layout_width="18dp"android:layout_height="26dp"android:layout_gravity="center_vertical"android:layout_marginStart="16dp"android:layout_marginEnd="16dp"android:background="@drawable/bg_back_title_selector" /><TextViewandroid:id="@+id/start_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:gravity="center"android:layout_gravity="center_vertical"android:textSize="14sp"android:textColor="@color/main_color"android:layout_marginStart="10dp"android:visibility="gone" /><TextViewandroid:id="@+id/head_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:layout_weight="1"android:ellipsize="end"android:layout_gravity="center"android:gravity="center"android:singleLine="true"android:text="@string/Tirepressure_detection"android:textColor="@color/main_color"android:textSize="16sp" /><ImageViewandroid:id="@+id/right_img"android:layout_width="36dp"android:layout_height="40dp"android:layout_gravity="center_vertical"android:layout_marginRight="8dp"android:padding="5dp"android:src="@drawable/title_setting"android:visibility="invisible" /><ImageButtonandroid:layout_width="40dp"android:layout_height="40dp"android:layout_gravity="center_vertical"android:layout_marginRight="8dp"android:background="@null"android:src="@drawable/exchange"android:visibility="gone" /><TextViewandroid:id="@+id/right_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="8dp"android:gravity="center"android:text="@string/send1"android:layout_gravity="end|center_vertical"android:textColor="@color/main_color"android:textSize="14sp"android:visibility="gone" /><TextViewandroid:layout_width="56dp"android:layout_height="40dp"android:layout_marginRight="8dp"android:gravity="center"android:text="@string/send1"android:textColor="@color/main_color"android:textSize="14sp"android:visibility="gone" /></FrameLayout>
</FrameLayout>
其中将标题布局包裹在一个FrameLayout里,然后主题里不进行任何状态栏颜色的配置。
使用第三方库或其他安卓原生api获取状态栏高度,手动设置被包裹视图的marginTop。
然后状态栏颜色可以直接用上面布局的FrameLayout背景色控制。如需调整状态栏文字颜色,使用原生api切换白色黑色即可。
此操作适配安卓所有版本。
当然关于Activity的window,需要去除TRANSLATG,FULLSCREEN的flag
window.clearFlag(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
)
,布局以及主题也无需设置
fitsytemWindow="true"
让状态栏由你自己来托管。
缺点
- 全屏和非全屏,状态栏需要手动控制
- 如果xml布局不规则,需要手动修改的地方多
优点
- 简单粗暴
- 对于结构好的项目,可以在BaseActivity下一并全部设置完成