安卓一个Activity中包含多个fragment实现沉浸式状态栏(最后是实现沉浸式的强制方法)

简介: 安卓一个Activity中包含多个fragment实现沉浸式状态栏

fragment和activity设置沉浸式方法并不一样。

一个一个来吧。首先说设置普通activity的。注意,一定要先判断,如果手机的SDK版本在19以下,就别弄了,没用

安卓7.0之后,沉浸式状态栏变灰问题,解决办法,再setContentView之前添加以下代码。

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
            try {
                @SuppressLint("PrivateApi") Class decorViewClazz = Class.forName("com.android.internal.policy.DecorView");
                Field field = decorViewClazz.getDeclaredField("mSemiTransparentStatusBarColor");
                field.setAccessible(true);
                field.setInt(getWindow().getDecorView(), Color.TRANSPARENT);  //改为透明
            } catch (Exception ignored) {}
        }


1、在style中自定义主题。

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorPrimaryDark</item>
    </style>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorPrimary</item>
    </style>

2、在AndroidManifest中想设置的actitvity下的theme中设置主题。

<activity
            android:name=".activity.AddItemActivity"
            android:label="添加项目"
            android:launchMode="singleTask"
            android:parentActivityName=".activity.MainActivity"
            android:theme="@style/AppTheme.NoActionBar">

3、在你的活动的布局的跟布局下加一行代码,至于为什么要加,你可以自己不加试试效果。

android:fitsSystemWindows="true"

到此为止,你应该已经实现了沉浸式。但是这并不是重点,这都是小菜。大坑来了。。


4、如果你在活动中使用了toolbar,恭喜你,需要注意了。你会发现按照上面的设置还是会出现不同的问题,你并不能在布局文件的根布局下加第三点中所说的代码。你应该在toolbar中添加。


5、真正的大坑来了,活动中嵌套fragment,而且活动中还使用了toolbar。注意。这样做需要注意以下几点:toolbar中还需要添加第三条中的代码;你的fragment中的第二个布局中添加那行代码,没错,并不是根布局,一定要注意。这样基本上差不多了。


但是,如果这些还是满足不了你的需求,看下面。


6、在se't'Content'View前添加两行代码,当然最好还是进行一下SDK的判断。必须大于19以上才可以

/*//透明状态栏
        getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        //透明导航栏
        getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

7、第六点只是把状态栏给隐藏了。并没有实现沉浸式,因为这里说的是强制。所以下面这段代码是强制给状态栏添加一个颜色

View views = new View(getActivity());
        ViewGroup.LayoutParams params = new ViewGroup
                .LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 60);
        views.setLayoutParams(params);
        views.setBackgroundColor(Color.rgb(18,150,219));
        ViewGroup decorView = (ViewGroup) getActivity().getWindow().getDecorView();
        decorView.addView(views);*/



目录
相关文章
|
12天前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
38 15
Android 系统缓存扫描与清理方法分析
|
15天前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
66 6
|
16天前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
22 3
|
16天前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
15 3
|
16天前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
13 0
|
2月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
49 4
|
2月前
|
ARouter 测试技术 API
Android经典面试题之组件化原理、优缺点、实现方法?
本文介绍了组件化在Android开发中的应用,详细阐述了其原理、优缺点及实现方式,包括模块化、接口编程、依赖注入、路由机制等内容,并提供了具体代码示例。
42 2
|
2月前
|
Android开发 开发者
Android面试之Activity启动流程简述
每个Android开发者都熟悉的Activity,但你是否了解它的启动流程呢?本文将带你深入了解。启动流程涉及四个关键角色:Launcher进程、SystemServer的AMS、应用程序的ActivityThread及Zygote进程。核心在于AMS与ActivityThread间的通信。文章详细解析了从Launcher启动Activity的过程,包括通过AIDL获取AMS、Zygote进程启动以及ActivityThread与AMS的通信机制。接着介绍了如何创建Application及Activity的具体步骤。整体流程清晰明了,帮助你更深入理解Activity的工作原理。
46 0
|
3月前
|
Android开发
Android在rootdir根目录创建自定义目录和挂载点的方法
本文介绍了在Android高通平台的根目录下创建自定义目录和挂载点的方法,通过修改Android.mk文件并使用`LOCAL_POST_INSTALL_CMD`变量在编译过程中添加目录,最终在ramdisk.img的系统根路径下成功创建了`/factory/bin`目录。
174 1
|
3月前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
369 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82