场景
- 谷哥手机pixel等原生安卓16的系统的状态栏异常显示,无法修改颜色
获取title布局(示例)
xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns: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">
<ImageView
android: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" />
<TextView
android: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" />
<TextView
android: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" />
<ImageView
android: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" />
<ImageButton
android: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" />
<TextView
android: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" />
<TextView
android: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
java
window.clearFlag(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
)
,布局以及主题也无需设置
xml
fitsytemWindow="true"
让状态栏由你自己来托管。
缺点
- 全屏和非全屏,状态栏需要手动控制
- 如果xml布局不规则,需要手动修改的地方多
优点
- 简单粗暴
- 对于结构好的项目,可以在BaseActivity下一并全部设置完成