Android全屏与透明状态栏

前言

Android沉浸式与全屏是不一样的两种主题,接下来我们看看吧

Android实现全屏

通过主题属性来实现

<style name="FullScreenTheme">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:background">#ff00beb4</item>
</style>复制代码

在AndroidManifest.xml中使用

<activity android:name=".TestActivity"
    android:theme="@style/FullScreenTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>复制代码

使用全屏的主题

<activity android:name=".TestActivity"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>复制代码

或者

<activity android:name=".TestActivity"
    android:theme="@android:style/Theme.Material.NoActionBar.Fullscreen">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>复制代码

java代码中设置属性

requestWindowFeature(Window.FEATURE_NO_TITLE);//这行代码一定要在setContentView之前,不然会闪退
setContentView(R.layout.activity_test);
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);复制代码

效果图

全屏效果图

Android实现透明状态栏

半沉浸式

<style name="TranslucentTheme">
    <item name="android:windowTranslucentNavigation">true</item>
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:background">#ff00beb4</item>
</style>复制代码

使用:

<activity android:name=".TestActivity"
    android:theme="@style/TranslucentTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>复制代码

半透明效果图

半沉浸式效果图5.x

这不是好好的吗?但这是5.1的系统,当切换到6.0以后的系统的时候

半沉浸式效果图6.0

透明式6.0

Window window = activity.getWindow();
//这一步最好要做,因为如果这两个flag没有清除的话下面没有生效
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
        | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//设置布局能够延伸到状态栏(StatusBar)和导航栏(NavigationBar)里面
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//设置状态栏(StatusBar)颜色透明
window.setStatusBarColor(Color.TRANSPARENT);
//设置导航栏(NavigationBar)颜色透明
window.setNavigationBarColor(Color.TRANSPARENT);复制代码

加上这段代码就可以了,效果如图

全沉浸式

关于导航栏SystemUiVisibility

final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE//保持系统的稳定性
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION//隐藏导航栏的布局,但是SYSTEM_UI_FLAG_HIDE_NAVIGATION不设置不会生效
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION//隐藏号航栏
                | View.SYSTEM_UI_FLAG_IMMERSIVE//沉浸式,会全屏
                /*| View.SYSTEM_UI_FLAG_FULLSCREEN//全屏
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN*/
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY//粘性沉浸式,下滑和上滑才能显示状态栏和导航栏
                | 0x00200000 |//隐藏导航栏的back键
                0x00400000 |//隐藏导航栏的home键
                0x01000000;//隐藏导航栏的recent键
window.getDecorView().setSystemUiVisibility(flags);复制代码

关于fitsSystemWindows

android:fitsSystemWindows=true<!--可以让你的布局不会顶到状态栏和导航栏上,但是颜色依然会透过去-->复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值