Android5.0+
狀態欄
半透明灰色遮罩
安卓5.0及以上的版本,透明狀態欄有一層遮罩一樣的,相當於暗色,部分APP完美適配了透明狀態欄,狀態欄顏色和APP一體了,但是很多APP仍然是狀態欄和APP不是同一個顏色,應該如何修改systemui才能將那個暗色的遮罩去掉呢?
去除前效果
直接貼代碼,一目瞭然:
import android.annotation.TargetApi;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import com.common.helper.R;
import com.readystatesoftware.systembartint.SystemBarTintManager;
/**
* CN: BaseActivity
* Author: JSYL-DINGCL ([email protected])
* Date: 2019/10/14
* Des: TODO:
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //系統版本大於19
setTranslucentStatus(true);
}
//狀態欄背景着色
SystemBarTintManager tintManager = new SystemBarTintManager(this);
tintManager.setStatusBarTintEnabled(true);
tintManager.setStatusBarTintResource(R.drawable.shape_statusbar);
//去除灰色遮罩
//Android5.0以上
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
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);
}else if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT){//Android4.4以上,5.0以下
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
@TargetApi(19)
public void setTranslucentStatus(boolean on) {
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if (on) {
winParams.flags |= bits; // a|=b的意思就是把a和b按位或然後賦值給a 按位或的意思就是先把a和b都換成2進制,然後用或操作,相當於a=a|b
} else {
winParams.flags &= ~bits; //&是位運算裏面,與運算 a&=b相當於 a = a&b ~非運算符
}
win.setAttributes(winParams);
}
}
shape_statusbar.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<gradient
android:angle="180"
android:startColor="@color/app_color_theme_1"
android:endColor="@color/app_color_theme_3" />
</shape>
color:
<color name="app_color_theme_alpha_1">#44EF5362</color> <!-- Grapefruit -->
<color name="app_color_theme_alpha_3">#44FFCF47</color> <!-- Sunflower -->