Android更换主题界面theme默认的actionbar,并且后续隐藏状态栏的方法总结

在项目过程中,根据需求要对默认theme的ActionBar进行更改,由DarkActionBar更改为NoActionBar。方法总结如下:
(1)在Android Studio中新建一个项目后,我们可以在配置文件AndroidManifest.xml中看到系统或自动生成App的主题,即对应
中有这样一行代码:

 android:theme="@style/AppTheme"

(2)修改ActionBar就是从AndroidManifest配置文件入手,将鼠标光标移动至AppTheme字符处,然后使用快捷键Ctrl B查看其描述(即跳转到res/values/styles.xml文件):

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

只要将上述代码中默认的DarkActionBar更改为NoActionBar,就成功将theme更改为了NoActionBar.

===============================华丽丽的分割线

按上述方法设置完NoActionBar后,还需要把最上面的状态栏也隐藏,因为我在项目中使用的板子上的系统设置已经写好了这个状态栏。直接上图看隐藏前后的效果:
Android更换主题界面theme默认的actionbar,并且后续隐藏状态栏的方法总结_第1张图片Android更换主题界面theme默认的actionbar,并且后续隐藏状态栏的方法总结_第2张图片 图一是在板子上运行后的效果,状态栏还未隐藏,所以上方显示是绿色的部分。图二是进行了状态栏隐藏操作后在AndroidStudio模拟器上运行后的效果,上方的绿色部分已经被隐藏,在板子上运行时也会使用系统设置已经写好的状态栏。

图片直观的展示状态栏隐藏前后的显示效果后,总结一下我使用的最上方的状态栏隐藏方法:

(1)写一个工具类StatusBarUtil类。

/**
 * StatusBar 工具类
 */
public class StatusBarUtil {
    /**
     * 设置状态栏全透明
     *
     * @param activity 需要设置的activity
     */
    public static void setTransparent(Activity activity) {
        transparentStatusBar(activity);
        setRootView(activity);
    }

    /**
     * 使状态栏透明
     */
    private static void transparentStatusBar(Activity activity) {
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        //需要设置这个flag contentView才能延伸到状态栏
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        //状态栏覆盖在contentView上面,设置透明使contentView的背景透出来
        activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
    }

    /**
     * 设置根布局参数
     */
    private static void setRootView(Activity activity) {
        ViewGroup parent = activity.findViewById(android.R.id.content);
        for (int i = 0, count = parent.getChildCount(); i < count; i++) {
            View childView = parent.getChildAt(i);
            if (childView instanceof ViewGroup) {
                childView.setFitsSystemWindows(true);
                ((ViewGroup) childView).setClipToPadding(true);
            }
        }
    }
}

(2)在Activity的onCreate()方法中调用写好的StatusBarUtil类的setTransparent方法。
即在对应Activity的OnCreate()方法中加入下面这行代码:

StatusBarUtil.setTransparent(this);

你可能感兴趣的:(Android更换主题界面theme默认的actionbar,并且后续隐藏状态栏的方法总结)