Activity主題樣式基類封裝
本文通過系統狀態列和虛擬選單欄的操作的封裝,集合成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); } }