Android APP全屏显示(去掉顶部状态栏和底部虚拟导航栏)以及使用AndroidAutoSize实现自适应

本文详细介绍了如何在Android应用中实现全屏显示,包括在AndroidManifest中设置主题,自定义BaseActivity以隐藏状态栏和导航栏,以及在特定Activity中处理横屏全屏显示。同时,文章还探讨了AndroidAutoSize库的使用,以实现屏幕尺寸的自适应,特别强调了横屏全屏模式下的特殊处理步骤,确保应用在不同设备上能正确适配。
摘要由CSDN通过智能技术生成
全屏显示

1.AndroidManifest设置APP样式android:theme,我项目中的Activity都是继承自Activity,如果是继承自AppCompatActivity,这里样式需要自己定义

<application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:hardwareAccelerated="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
        <!-- LAUNCHER 页面不可设置成singleTask模式,如果设置成singleTask,点击home键,再打开app会返回到LAUNCHER界面 -->
        <activity
            android:name=".activity.SplashPage"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:screenOrientation="landscape"
            android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".activity.LoginActivity"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:launchMode="singleTask"
            android:screenOrientation="landscape"
            android:windowSoftInputMode="adjustResize"/>

        <meta-data
            android:name="design_width_in_dp"
            android:value="597" />
        <meta-data
            android:name="design_height_in_dp"
            android:value="417" />
    </application>

2.定义BaseActivity,继承自Activity,重写onWindowFocusChanged

    override fun onWindowFocusChanged(hasFocus: Boolean) {
        AppUtil.navigationBarStatusBar(this, hasFocus)//隐藏状态栏和导航栏以及actionBar
    }
    
    fun navigationBarStatusBar(activity: Activity, hasFocus: Boolean) {
            if (hasFocus) {
                val decorView: View = activity.window.decorView
                decorView.setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            or View.SYSTEM_UI_FLAG_FULLSCREEN
                            or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                )
            }
        }

3.重写继承自BaseActivity的Activity的onCreate方法,在setContentView之前设置window.attributes

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val params = window.attributes
        params.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        window.attributes = params
        activityMainBinding = ActivitySplashBinding.inflate(LayoutInflater.from(this))
        setContentView(activityMainBinding.root)
    }
AndroidAutoSize实现自适应

继承的方法参考官网,这里只重点记录下,由于项目横屏全屏显示需要做的特殊处理点
1.横屏显示,BaseActivtiy实现CustomAdapt接口,isBaseOnWidth返回false,getSizeInDp返回设计稿中的高度(DP值)

   override fun isBaseOnWidth(): Boolean {
        return false
    }

    override fun getSizeInDp(): Float {
        return 417f
    }

2.在onWindowFocusChanged中,重新设置屏幕的实际高度和宽度,设置不包含状态栏

        AutoSizeConfig.getInstance().isUseDeviceSize = true//包含状态栏的高度的屏幕高度,全屏或者是沉浸式的高度要包含状态栏
        AutoSizeConfig.getInstance().screenWidth = DisplayUtil.getRealScreenWidthRelatedInformation()
        AutoSizeConfig.getInstance().screenHeight = DisplayUtil.getRealScreenHeightRelatedInformation()
        AutoSize.autoConvertDensityOfCustomAdapt(this,this) //重新计算density
使用HBuilderX (HBX) 打包Vue.js项目生成iOS应用后,如果遇到顶部内容与手机电量状态栏重叠的问题,通常需要检查并调整以下设置: 1. **安全区域布局**:在Vue项目中,特别是在使用了像Vux、vant这样的UI库时,它们可能会有自适应屏幕边距的特性。确保你在样式表或者布局文件中设置了`statusBar`的高度,比如在`.vue`文件里使用`vux-safe-area` 或者通过调整CSS规则来覆盖默认的安全区域。 ```css /* 使用Vux的例子 */ .vux-safe-area-top { padding-top: env(safe-area-inset-top); } /* 自定义安全区域高度 */ body { padding-top: env(safe-area-inset-top); } ``` 2. **适配模式**:在HBuilderX的工程配置中,查看是否启用了“强制全屏”或“跟随系统”的模式。关闭“自动适配屏幕边缘”功能可以避免内容溢出到状态栏。 3. **检查打包设置**:确认在HBuilderX的Project.json配置文件中,对于iOS项目是否有特殊的设置,例如`ios.displayHomeAsUp` 和 `ios.launchImage`,这些都可能影响状态栏显示。 4. **代码审查**:检查是否有特定组件或插件直接控制了导航栏的高度,如果有,可能需要调整这部分代码以兼容状态栏。 5. **模拟器测试**:在真实的iOS模拟器上测试,以便更准确地发现问题所在,并参考Apple的设计文档来优化布局。 处理这类问题时,务必在真机或者模拟器环境下检查,并针对不同版本的iOS系统进行适配,因为苹果可能会对系统的界面元素有更新。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值