沉浸式状态栏设置的几种方式
先上效果图总共有三种方法,下面一一介绍: 第一种 布局中顶层容器配置:android:clipToPadding="true"android:fitsSystemWindows="true" 结果如下 在Activity对应的style里面设置:<item name="windowNoTitle">true</item>
先上效果图
总共有三种方法,下面一一介绍:
第一种
布局中顶层容器配置:
android:clipToPadding="true"
android:fitsSystemWindows="true"
结果如下
在Activity对应的style里面设置:
<item name="windowNoTitle">true</item>
<item name="android:windowTranslucentStatus">true</item>
总共是这样
第二种
在Activity代码中添加:
private void initWindows() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
window.setNavigationBarColor(Color.BLACK);
}
}
然后在setContentView方法前调用即可
如下图
第三种
调用第三方jar包
在gradle中配置:
compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
如下图
在Activity里添加:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
SystemBarTintManager tintManager = new SystemBarTintManager(this);
// 激活状态栏
tintManager.setStatusBarTintEnabled(true);
// enable navigation bar tint 激活导航栏
tintManager.setNavigationBarTintEnabled(true);
//设置系统栏设置颜色
//tintManager.setTintColor(R.color.red);
//给状态栏设置颜色
tintManager.setStatusBarTintColor(Color.GREEN);
//Apply the specified drawable or color resource to the system navigation bar.
//给导航栏设置资源
tintManager.setNavigationBarTintResource(R.mipmap.ic_launcher);
}
如图
注释很明确了,我也不多说。
最后我还要添一个,如果想让状态栏背景栏颜色和该页面顶端颜色一样,就用我下面这个。配置和第一种都一样,自己回上去去看。
然后在Activity里添加代码
代码如下:
new Thread(){
@Override
public void run() {
super.run();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pic);
int pixel = bitmap.getPixel(1, 1);//获取颜色
int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);
Message message = new Message();
message.what = 123;
message.obj = redValue;
message.arg1 = greenValue;
message.arg2 = blueValue;
handler.sendMessage(message);
Log.d("MainActivity.this", "redValue" + redValue + "blueValue" + blueValue + "greenValue" +
greenValue + "height" + bitmap.getHeight() + "width" + bitmap.getWidth());
}
}.start();
和
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what)
{
case 123:
activity_main.setBackgroundColor(Color.argb(255, (int)msg.obj, msg.arg1, msg.arg2));
}
}
};
什么意思呢?就是获取该页面顶端图片坐标(1,1)的像素,然后传出去,再设置状态栏颜色,很简单了。
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pic);这里的R.drawable.pic就是我们需要分析的图片,每个人都不一样,自己填进去即可。
最后给出资源:http://download.csdn.net/detail/wanxuedong/9890210
更多推荐
所有评论(0)