本文通过系统状态栏和虚拟菜单栏的操作的封装,集合成BaseThemeActivity的Activity主题基类。可以选择性设置全屏,透明状态栏,设置颜色状态栏,设置虚拟菜单栏颜色,去除虚拟菜单栏等属性。
BaseThemeActivity完整代码如下:
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
public class BaseThemeActivity extends AppCompatActivity{
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
protected void setNavigationBarColor(int color) {
getWindow().setNavigationBarColor(color);
}
/**
* 去掉虚拟菜单
*/
protected void fullScreen() {
int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
uiFlags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
} else {
uiFlags |= View.SYSTEM_UI_FLAG_LOW_PROFILE;
}
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(uiFlags);
}
/**
* 状态栏透明
*/
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
protected void setSystemBarTransparent() {
setSystemBarColor(Color.TRANSPARENT);
}
/**
* 设置状态栏颜色
* @param color
*/
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
protected void setSystemBarColor(int color){
getWindow().setStatusBarColor(color);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
/**
* 去掉虚拟菜单和系统状态栏的全屏
*/
protected void setFullScreen() {
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
/**
* 取消全屏
*/
protected void cancelFullScreen() {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(0);
}
/**
* 获取是否存在NavigationBar
*/
protected boolean checkDeviceHasNavigationBar(Context context) {
Resources resources = context.getResources();
int resIdShow = resources.getIdentifier("config_showNavigationBar", "bool", "android");
boolean hasNavigationBar = false;
if (resIdShow > 0) {
hasNavigationBar = resources.getBoolean(resIdShow);//是否显示底部navigationBar
}
return hasNavigationBar;
}
/**
* 获取系统状态栏高度
* @param context
* @return
*/
protected int getStatusBarHeight(Context context) {
int result = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}
/**
* 隐藏虚拟菜单
* @param window
*/
protected void hideNavigationBar(Window window) {
int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
uiFlags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; //SYSTEM_UI_FLAG_IMMERSIVE_STICKY: hide navigation bars - compatibility: building API level is lower thatn 19, use magic number directly for higher API target level
} else {
uiFlags |= View.SYSTEM_UI_FLAG_LOW_PROFILE;
}
View decorView = window.getDecorView();
decorView.setSystemUiVisibility(uiFlags);
}
}
网友评论