Android 设置特定Activity内容顶部显示在状态栏底部,也就是状态栏的下层 以及封装一个方法修改状态栏颜色
推荐:https://github.com/gyf-dev/ImmersionBar
在 Android 中要实现特定 Activity 内容顶部显示在状态栏底部以及封装方法修改状态栏颜色,可以通过以下步骤来完成:
一、让 Activity 内容显示在状态栏底部
- 在 AndroidManifest.xml 文件中,为特定的 Activity 设置主题,主题中可以设置窗口属性,使得状态栏透明:
<activity android:name=".YourActivity"
android:theme="@style/TransparentStatusBarTheme">
</activity>
创建一个主题样式文件 styles.xml(如果已有则在其中添加):
<style name="TransparentStatusBarTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
</style>
Activity 的布局文件根布局中设置 fitsSystemWindows
属性为 true
,这样可以让布局适应系统窗口,包括状态栏:
- 在 Activity 的 onCreate 方法中,通过代码设置状态栏透明:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
}
二、封装修改状态栏颜色的方法
- 创建一个工具类
StatusBarUtils
:
public class StatusBarUtils {
public static void setStatusBarColor(Activity activity, int color) {
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);
}
}
}
- 在需要修改状态栏颜色的地方调用这个方法:
StatusBarUtils.setStatusBarColor(this, Color.RED); // 将状态栏颜色设置为红色
通过以上步骤,就可以实现特定 Activity 内容顶部显示在状态栏底部,并可以方便地通过封装的方法修改状态栏颜色。
import android.app.Activity;
import android.os.Build;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
public class StatusBarUtils {
/**
* StatusBarUtils.setStatusBarColor(this, Color.RED); // 将状态栏颜色设置为红色
*/
public static void setStatusBarColor(Activity activity, int statusBarBgcolor, boolean isLightStatus) {
Window window = activity.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(statusBarBgcolor);
View decorView = window.getDecorView();
int flags = decorView.getSystemUiVisibility();
if (isLightStatus) {
// 设置为浅色模式(黑色文字)
flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
} else {
// 设置为深色模式(白色文字)
flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
}
decorView.setSystemUiVisibility(flags);
}
/**
* 判断当前活动的状态栏是否为浅色。
*
* @param activity 活动实例
* @return 如果状态栏为浅色,返回 true;否则返回 false。
*/
private static boolean isLightStatusBar(Activity activity) {
try {
View decorView = activity.getWindow().getDecorView();
int flags = decorView.getSystemUiVisibility();
return (flags & View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) != 0;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
private static void setLightStatusBar(Activity activity, boolean isLightStatus) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isLightStatus != isLightStatusBar(activity)) {
View decorView = activity.getWindow().getDecorView();
int flags = decorView.getSystemUiVisibility();
if (isLightStatus) {
flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
} else {
flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
}
decorView.setSystemUiVisibility(flags);
}
}
}
原文地址:https://blog.csdn.net/xiaoerbuyu1233/article/details/142974672
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!