android 沉浸,Android沉浸式效果

本文介绍了如何在Android应用中实现沉浸式效果,包括设置状态栏颜色与App顶部颜色一致,以及设置状态栏透明。提供了两种实现方式的详细代码,适用于Android 4.4及以上版本。同时,还涉及了修改状态栏文字颜色和底部虚拟键的背景及按键颜色的方法,以确保在不同设备上的适配和视觉效果。
摘要由CSDN通过智能技术生成

Android实现沉浸式效果

沉浸式效果简单来说就是指系统状态栏的颜色与App的顶部颜色一致。

那如何实现这种效果呢?有两种实现方式。

1. 设置状态栏颜色与app的顶部颜色一致,并在布局中设置android:fitsSystemWindows="true"

2. 设置状态栏透明,并在布局中设置android:fitsSystemWindows="false",注意如果设置为false,要预留状态栏的高度,不然会重叠,最好是代码动态适配,计算任务栏高度来适配刘海屏

下面给出相应设置状态栏颜色等的方法

修改状态栏背景颜色

/**

* 修改状态栏颜色,支持4.4以上版本

* @param activity

* @param colorId

*/

public static void setStatusBarColor(Activity activity, int colorId) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

Window window = activity.getWindow();

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

window.setStatusBarColor(activity.getResources().getColor(colorId));

} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

//使用SystemBarTint库使4.4版本状态栏变色,需要先将状态栏设置为透明

transparencyBar(activity);

SystemBarTintManager tintManager = new SystemBarTintManager(activity);

tintManager.setStatusBarTintEnabled(true);

tintManager.setStatusBarTintResource(colorId);

}

}

/**

* 设置状态栏透明,启用全屏模式

* @param activity

*/

@TargetApi(19)

public static void transparencyBar(Activity activity) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

Window window = activity.getWindow();

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

window.setStatusBarColor(Color.TRANSPARENT);

window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE

| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

Window window = activity.getWindow();

window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,

WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

}

}

修改状态栏文字颜色 只支持白、黑

/**

* 谷歌原生方式改变状态栏文字颜色 只支持白、黑

* @param activity

* @param dark

*/

private static void setAndroidNativeLightStatusBar(Activity activity, boolean dark) {

View decor = activity.getWindow().getDecorView();

if (dark) {

decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

} else {

decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

}

}

为了适配虚拟键,一般还要根据app底部的颜色修改虚拟键的背景色,和按键色

底部虚拟键背景颜色.貌似不能设置为透明

/**

* 设置底部虚拟键背景颜色

* @param color

*/

public void setNavigationBarColor(int color) {

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

int flag = getWindow().getDecorView().getSystemUiVisibility();

flag |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

if (Build.VERSION.SDK_INT >= 21) {

getWindow().setNavigationBarColor(getResources().getColor(color));

}

}

底部虚拟键按键颜色,只能是黑或白

/**

* 设置底部虚拟键按键是否为黑色(默认白色, 8.0 API)

* @param isDark

*/

public void setNavigationBarIconDark(boolean isDark) {

View decor = getWindow().getDecorView();

int flag = decor.getSystemUiVisibility();

if (isDark) {

flag |= SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;

} else {

flag &= ~SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;

}

decor.setSystemUiVisibility(flag);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值