Activity主题样式基类封装

作者: 奔跑吧李博 | 来源:发表于2018-10-09 11:29 被阅读197次

本文通过系统状态栏和虚拟菜单栏的操作的封装,集合成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);
    }
}

相关文章

网友评论

本文标题:Activity主题样式基类封装

本文链接:https://www.haomeiwen.com/subject/vqnayftx.html