Android 沉浸式状态栏
Posted DullFan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 沉浸式状态栏相关的知识,希望对你有一定的参考价值。
文章目录
前言
4-20分享
提示:以下是本篇文章正文内容,下面案例可供参考
先来看下效果图(夜神模拟器和真机有点差别,我不会搞gif动图,就勉强看下吧):
一、沉浸式状态栏
以下就是代码,加上一些自己的理解:
//使用
fullScreen(getActivity());
//封装成方法
//通过设置全屏,设置状态栏透明
private static void fullScreen(Activity activity)
//判断版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
//5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色
Window window = activity.getWindow();
//获取顶级视图
View decorView = window.getDecorView();
//两个 flag 要结合使用,表示让应用的主体内容占用系统状态栏的空间
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
//FLAG_TRANSLUCENT_STATUS 透明状态栏
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//添加标志,应该是背景图
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
decorView.setSystemUiVisibility(option);
//设置状态栏颜色
window.setStatusBarColor(Color.TRANSPARENT);
else
//获得窗口
Window window = activity.getWindow();
//获得布局属性
WindowManager.LayoutParams attributes = window.getAttributes();
//好获得状态栏颜色
int flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
attributes.flags |= flagTranslucentStatus;
//设置颜色
window.setAttributes(attributes);
二、改变标题和状态栏颜色
代码如下(示例):
//@RequiresApi的作用仅仅是让编译通过
@RequiresApi(api = Build.VERSION_CODES.M)
private void initTitle()
//addNum:控制标题在什么位置完全显示
int addNum = 200;
int Max = 255 + addNum;
int MIn = 0 + addNum;
NestedScrollView home_scrollview = mView.findViewById(R.id.home_scrollView);
RelativeLayout relativeLayout = mView.findViewById(R.id.home_relativeLayout);
//设置标题背景颜色
relativeLayout.setBackgroundColor(getResources().getColor(R.color.purple_500));
//将标题背景透明度设置为0
relativeLayout.getBackground().setAlpha(0);
//ScrollView滚动动监听
home_scrollview.setOnScrollChangeListener(new View.OnScrollChangeListener()
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY)
//渐变主题的核心
if (scrollY <= Max && scrollY >= MIn)
relativeLayout.getBackground().setAlpha(scrollY - MIn);
//Y轴大于或者等于Max的话标题透明度完全显示
if (scrollY >= Max)
relativeLayout.getBackground().setAlpha(255);
//Y轴小于或者等于0的话标题透明度完全不显示
if (scrollY <= 0)
relativeLayout.getBackground().setAlpha(0);
);
总结
以上就是今天要讲的内容,以上是关于Android 沉浸式状态栏的主要内容,如果未能解决你的问题,请参考以下文章