注意点:
1:在setContentView之前使用
2:xml根布局添加 android:fitsSystemWindows=“true” 解决View与状态栏重叠的问题
版本:
android4.4(api 19)以上 可以实现半透明:
if (Build.VERSION.SDK_INT >= 19) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
Android 5.0(API 21)以上 可以设置状态栏与导航栏颜色:
if (Build.VERSION.SDK_INT >= 21) {
getWindow().setStatusBarColor(Color.RED); // 状态栏
getWindow().setNavigationBarColor(Color.RED); // 导航栏
}
Android 6.0(API 23)以上 可以设置状态栏字体颜色(黑或白)
if (Build.VERSION.SDK_INT >= 23) { // 大于等于6.0(api=23)设置状态栏字体颜色
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); //黑色
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); //白色
}
常用功能:
实现状态栏半透明:
if (Build.VERSION.SDK_INT >= 19) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
实现状态栏完全透明:
if(Build.VERSION.SDK_INT >= 21) {
Window window = getWindow();
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.setStatusBarColor(Color.TRANSPARENT);
}
实现状态栏自定义颜色:
//改变状态栏颜色需要大于api>21
if(Build.VERSION.SDK_INT >= 21) {
Window window = MainActivity.this.getWindow();
//取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//设置状态栏颜色
window.setStatusBarColor(ContextCompat.getColor(this, R.color.myshoptitlecolor));
}
实现状态栏与导航栏全透明
if (Build.VERSION.SDK_INT >= 21) { //大于等于5.0(api=21) 状态栏与导航栏全透明
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().setStatusBarColor(Color.TRANSPARENT);
getWindow().setNavigationBarColor(Color.TRANSPARENT);
}
全屏显示:
if (Build.VERSION.SDK_INT >= 21) {
getActivity().getWindow().setFlags(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getActivity().requestWindowFeature(Window.FEATURE_NO_TITLE);// 隐藏标题
getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏
}
设置 横屏竖屏 显示:
方式一:Mainfest中给activity加上属性:
android:screenOrientation="portrait",屏幕设定为竖屏
android:screenOrientation="landscape",屏幕设定为横屏
方式二:Activity的onCreate方法中:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);设定为竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);设定为横屏
设置是否支持分屏模式:
在Mainfest中的application标签中加上下面属性:
android:resizeableActivity="false" //false不支持分屏
设置app字体不跟随系统字体改变:
在BaseActivity中重写此方法
@Override
public Resources getResources() { //设置字体大小不跟随系统字体改变
Resources res = super.getResources();
Configuration config = new Configuration();
config.setToDefaults();
res.updateConfiguration(config, res.getDisplayMetrics());
return res;
}