Activity页面全屏探究

QuibblerQuibbler 2020-02-10 约 6 分钟 1758 次阅读

Activity页面全屏探究

一些场景下需要应用全屏

1、Window设置Flag

在Activity的onCreate()方法中设置Flag:WindowManager.LayoutParams.FLAG_FULLSCREEN。了解更多Window Flag相关知识的详见《理解WindowManager》。

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

2、在AndroidManifest中设置theme属性

首先在values/styles.xml中自定义theme主题,继承一个系统自带的主题。然后设置android:windowFullscreen属性为true。

<style name="AppTheme.TransparentStausBar" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="windowNoTitle">true</item>
        //Window全屏
        <item name="android:windowFullscreen">true</item>
    </style>

在AndroidManifest中application或者activity节点中使用自定义的android:theme

<activity android:name=".FullScreenActivity"
        android:theme="@style/FullScreenTheme"/>

IQOO的全屏效果如下,状态栏怎么直接黑了,不是想要的那种全屏。

      

可能状态栏需要另外设置,因为手机屏幕是水滴屏,屏幕正上方有一个前置摄像头。设置全屏android:windowFullscreen = false的时候,将状态栏设置成透明,有点全屏的意思了,在将状态栏隐藏就是真正的全屏!

<item name="windowNoTitle">true</item>
    //设置非全屏
    <item name="android:windowFullscreen">false</item>
    //状态栏透明
    
    <item name="android:windowTranslucentStatus">true</item>

 

随后用锤子 Smartisan M1L 调试一下,是完全可以全屏显示地,状态栏也隐藏了。

因为自定义的Activity继承自AppCompatActivity,所以只能使用Theme.AppCompat.*下的主题。如果使用了android:theme="@android:style/Theme.NoTitleBar.Fullscreen"否则会奔溃报错。提示应该使用Theme.AppCompat下的主题。

        D AndroidRuntime: Shutting down VM

        E AndroidRuntime: FATAL EXCEPTION: main

        E AndroidRuntime: Process: com.example.androidstudio, PID: 17290

        E AndroidRuntime: java.lang.RuntimeException: 

                   Unable to start activity ComponentInfo{.androidsenCaptureActivity}: 

                   java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w

评论 (1)

评论功能已关闭,仅展示历史评论
Quibbler
Quibbler

水滴屏等异形屏全屏

        今天又进行了摸索:

        在style里面设置,下面两个属性缺一不可。更多style属性参考《Android主题Theme探究》

    <item name="android:windowFullscreen">true</item>
    <item name="android:windowTranslucentStatus">true</item>

        android:windowFullscreen属性还可以在代码中设置:

    Window window = getWindow();
    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);


        关键来了,之前设置全屏,低版本的锤子可以,高版本的IQOO就不行。因为Android后面引入的刘海屏的概念,又搞复杂了。Android P中新增了一个布局参数属性layoutInDisplayCutoutMode,包含了三种不同的模式:

模式模式说明
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT只有当DisplayCutout完全包含在系统栏中时,才允许窗口延伸到DisplayCutout区域。 否则,窗口布局不与DisplayCutout区域重叠。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER

该窗口决不允许与DisplayCutout区域重叠。

LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES该窗口始终允许延伸到屏幕短边上的DisplayCutout区域。

        如果是Android API 28以后的刘海屏,需要进一步设置属性。

    WindowManager.LayoutParams lp = window.getAttributes();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
    }
    window.setAttributes(lp);

        这样一来在刘海屏上显示地也是全屏了:

        如果不设置WindowManager.LayoutParams的layoutInDisplayCutoutMode属性值为WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES,那么即使设置了android:windowFullscreen也是在刘海屏区域显示一个黑边: