• Android全屏显示和屏幕旋转的处理


    全屏显示

    全屏隐藏状态栏

    Window window = getWindow();
    int flag = WindowManager.LayoutParams.FLAG_FULLSCREEN;
    requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏状态栏
    window.setFlags(flag, flag); //全屏显示
    
    • 1
    • 2
    • 3
    • 4

    注意:必须在setContentView之前执行,否则会报错。另外这种全屏显示方式的缺点是,会有隐藏标题栏和隐藏状态栏的动画过渡效果。

    通过Theme控制

    自定义全屏样式

    res > values > themes.xml

    <style name="AppTheme.ZGSBSPlayer.FullScreen" parent="Theme.AppCompat.NoActionBar">
        "windowNoTitle">true
        "android:windowFullscreen">true
    style>
    
    • 1
    • 2
    • 3
    • 4

    AndroidManifest.xml

    <activity android:name=".vrplayer.VRPlayerActivity"
        android:theme="@style/AppTheme.ZGSBSPlayer.FullScreen">
    
    • 1
    • 2

    调用系统全屏样式

    可能会报错 You need to use a Theme.AppCompat theme (or descendant) with this activity

    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
    
    • 1

    横竖屏切换

    默认当用户手机重力感应器打开后,屏幕旋转时,Activity的生命周期会重新加载onDestroy-> onCreate即当前Activity被销毁了。
    想要很好的支持屏幕旋转,建议在res中建立layout-land和layout-port两个文件夹,分别设定布局。

    固定屏幕方向

    AndroidManifest属性控制

    设置AndroidManifest.xml对应的 activity 属性
    默认的情况下,应用启动后,会固定为指定的屏幕方向,即使屏幕旋转,Activity也不会出现销毁或者转向等任何反应。

    android:screenOrientation="landscape"  //横屏
    android:screenOrientation="portrait"   //竖屏
    
    • 1
    • 2

    代码中强制设置为横屏

    @Override
    protected void onResume() {
        if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
        super.onResume();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    强制开启屏幕旋转效果

    如果手机关闭了重力感应器,或者同上activity中固定了屏幕方向,则默认情况下该Activity不会响应屏幕旋转事件。
    如果在此情况下依然希望Activity响应屏幕旋转,则在onCreate()方法中添加代码

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
    
    • 1

    屏幕旋转时防止Activity被销毁

    AndroidManifest.xml

    # 在相应的Activity声明中添加属性
    android:configChanges="orientation|keyboard|keyboardHidden|screenSize|layoutDirection" 
    
    • 1
    • 2
    • orientation #屏幕在纵向和横向间旋转
    • keyboardHidden #键盘显示或隐藏
    • keyboard #键盘类型变更如从9键盘切换到全键盘等
    • fontScale #用户变更了首选的字体大小
    • locale #用户选择了不同的语言设定
    • touchscreen或navigation #键盘或导航方式变化

    以前只需要添加orientation后续需多加一个screenSize再后来需要添加上layoutDirection否则onConfigurationChanged不会被调用

    如果缺少了keyboardHidden选项,不能防止Activity的销毁,并且在之后提到的onConfigurationChanged事件中只能捕获到坚屏变横屏的事件,不能捕获横屏变坚屏。

  • 相关阅读:
    【Ansible】ansible容器学习环境搭建
    字节网上面经整理(100道面试题)二篇
    Oracle批量修改字段类型varchar2(2000)转clob
    <Altium Designer> 将.DSN文件导入并转换成SchDoc文件
    【Docker 基础教程】Docker命令运行原理及一些简单的操作命令
    备忘录:关于C#生成商品条码
    ZYNQ PS与PL通信之DMA
    Java括号匹配
    洛谷 P1050 [NOIP2005 普及组] 循环 AC
    开源与区块链:去中心化的未来
  • 原文地址:https://blog.csdn.net/ymtianyu/article/details/126873807