android 布局 横屏 android横屏适配

这篇具有很好参考价值的文章主要介绍了android 布局 横屏 android横屏适配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、刘海屏适配
1、layoutInDisplayCutoutMode属性
Android 9.0系统中提供了3种layoutInDisplayCutoutMode属性来允许应用自主决定该如何对刘海屏设备进行适配。

LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
这是一种默认的属性,在不进行明确指定的情况下,系统会自动使用这种属性。这种属性允许应用程序的内容在竖屏模式下自动延伸到刘海区域,而在横屏模式下则不会延伸到刘海区域。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
这种属性表示,不管手机处于横屏还是竖屏模式,都会允许应用程序的内容延伸到刘海区域。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER 这种属性表示,永远不允许应用程序的内容延伸到刘海区域。
2、配置layoutInDisplayCutoutMode的方式

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
}



layoutInDisplayCutoutMode使用默认值,即我们不去设置。即使我们不做任何的适配工作,绝大多数的程序在默认情况下也是可以自动适配刘海屏手机的,并不会产生应用程序无法使用等问题的发生。

但是,假如你开发的是一款视频类应用或者游戏的话(横屏显示),充分利用屏幕的空间明显可以带来更好的用户体验,界面上留着一条大黑边对用户总归是不够友好的。这个时候我们就可以通过指定layoutInDisplayCutoutMode属性的值,来让应用程序具备更好的屏幕适配性。
 
 

红色箭头处有条大黑边。如果我们将layoutInDisplayCutoutMode设置为LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES,大黑边就会消失。并且设置沉浸式布局

override fun onWindowFocusChanged(hasFocus: Boolean) {
    super.onWindowFocusChanged(hasFocus)
    if (hasFocus && Build.VERSION.SDK_INT >= 19) {
        val decorView = window.decorView
        decorView.systemUiVisibility = (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、需要适配的地方
但是界面上交互的一些按键可能被刘海挡住,这样用户就不能点击了。

我们左边的按键被刘海挡住一部分。这种情况就需要我们进行适配了。DisplayCutout类主要用于获取凹口位置和安全区域的位置等。主要方法如下所示:

getBoundingRects():返回Rects的列表,每个Rects都是显示屏上非功能区域的边界矩形。

getSafeInsetLeft ():返回安全区域距离屏幕左边的距离,单位是px。

getSafeInsetRight ():返回安全区域距离屏幕右边的距离,单位是px。

getSafeInsetTop ():返回安全区域距离屏幕顶部的距离,单位是px。

getSafeInsetBottom():返回安全区域距离屏幕底部的距离,单位是px。

 

适配代码如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    root_layout.setOnApplyWindowInsetsListener { view, windowInsets ->
        val displayCutout = windowInsets.displayCutout
        if (displayCutout != null) {
            val left = displayCutout.safeInsetLeft
            val top = displayCutout.safeInsetTop
            val right = displayCutout.safeInsetRight
            val bottom = displayCutout.safeInsetBottom
            val leftParams: FrameLayout.LayoutParams = btn_left.layoutParams as FrameLayout.LayoutParams
            leftParams.setMargins(left, top, right, bottom)
        }
        windowInsets.consumeSystemWindowInsets()
    }
}


 
root_layout是界面的根布局,上面代码就是获取安全区域,将按钮设置在安全区域以外。
 

现在按钮就没有被刘海挡住了。

二、non-SDK接口限制
一般来说,SDK 接口是指在 Android 框架软件包索引中记录的接口。 对非 SDK 接口的处理是 API 抽象化的实现细节;其会随时更改。
Android P 引入了针对非 SDK 接口的新使用限制,无论是直接使用还是通过反射或 JNI 间接使用。 无论应用是引用非 SDK 接口还是尝试使用反射或 JNI 获取其句柄,均适用这些限制。
名单分类:

Light grey list: targetSDK>=P时,警告;
Dark grey list:targetSDK<P时,警告;>=p时,不允许调用;
Black list:三方应用不允许调用;
三、Battery Improvements
谷歌在P版本之前没有一个完整的功耗解决方案,OEM厂商分别开发各自的功耗方案,管控手段都包括了清理应用,功耗得到优化,但是同时也影响了三方应用的一些功能正常使用,谷歌为了解决这个问题在P版本提出了自己的功耗解决方案。
主要方案:
AAB(Auto Awesome Battery):
1、通过ML算法将应用进行分类,不同类型的应用功耗管控策略不一样
2、Firebase Cloud Messaging (FCM):管控三方消息接收的频率
3、谷歌提供了统一的应用的管控方法:Forced App Standby (FAS),谷歌不会通过清理应用来优化功耗
Extreme Battery Saver(EBS)谷歌超级省电模式;
Smart screen brightness:屏幕亮度调节优化算法。
影响
谷歌功耗方案对三方应用各种管控,存在导致应用后台功能无法正常使用的可能,特别是:IM、邮箱、闹钟、音乐(直播)、地图导航、运动健康、下载、日历等应用影响比较大。目前通过谷歌提供的调试命令验证:所有的应用都有可能会被分到管控的类型,对三方的后台功能是有影响的。
 文章来源地址https://www.toymoban.com/news/detail-703094.html

到了这里,关于android 布局 横屏 android横屏适配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • iOS16灵动岛横屏视频播放适配(ZFPlayer)

    手机为iphone14Pro 版本iOS16.0.3 Xcode版本14.2 视频播放第三方库ZFPlayer 使用视频时,视频播放自动横屏控制层的返回按钮和暂停按钮都点不到,上图错误、下图正确(控制按钮距离屏幕左右减小50、视频全屏不做改变) 全屏没有考虑灵动岛的范围 ,这里在屏幕旋转时重置控制层

    2023年04月08日
    浏览(25)
  • uniapp小程序横屏后适配问题(解决方案)

    问题一: 通常我们在小程序端切换横屏后会出现字体或宽高大小出现适配问题 解决方法 使用vmin来解决适配问题(使用rpx转换vmin) rpx与vmin的换算关系:5rpx 等价 calc(5vmin * 100 / 750)== 简单写==5rpx 等价 calc(5vmin / 7.5) 下面来看下效果(已经实现了哦) 竖屏模式下 横屏模式下 横

    2024年02月13日
    浏览(43)
  • uniapp实现微信小程序横屏适配问题demo效果(整理)

    使用VMIN进行布局 先了解css3的两个属性vmax和vmin 竖屏布局的时候,750rpx就是竖屏布局屏幕的宽度,vmin不管横竖屏的情况下,100vmin都是手机屏幕的宽度,所以rpx与vmin之间有一个换算的关系:x rpx=( x * 100 / 750)vmin。 也就是说: 75rpx转化为vmin就是 75 * 100/750=10vmin 所以我们将rpx转化

    2024年02月11日
    浏览(39)
  • Android 14.0 SystemUI修改状态栏电池图标样式为横屏显示

    在14.0的系统rom产品定制化开发中,对于原生系统中SystemUId 状态栏的电池图标是竖着显示的,一般手机的电池图标都是横屏显示的 可以觉得样式挺不错的,所以由于产品开发要求电池图标横着显示和手机的样式一样,所以就得重新更换SystemUI状态栏的电池样式了 如图: systemu

    2024年04月29日
    浏览(36)
  • uniapp云打包成app后,在Android12手机上横屏样式未填满手机界面;在ios手机上横屏不生效;问题解决

    问题1:横屏在本地调试时是好的,云打包后在Android12上横屏样式宽度就只生效了一半。 解决:在onLoad中,定时500ms后再进行横屏操作(200ms不生效) 问题2:云打包后在ios中横屏不生效。 解决:在manifest.json文件中的app-plus下、app-plus中的distribute下都添加横竖屏设置代码,之前

    2024年02月12日
    浏览(45)
  • unity调试手机游戏(Android)【模拟器+真机】+设置运行时游戏横屏

    注:我使用的unity版本为2021.3.2f1c1 1、将平台调整为Android 点击“文件“ —— ”生成设置“ 在平台选择Android,点击右下方的切换平台 (如果没有下载Android平台包需要先下载,我的下载好后自动配置了SDK/JDK/NDK,在下载时可选。若没有选择下载SDK/NDK/JDK,需要自行配置) 检查

    2024年02月08日
    浏览(38)
  • h5响应式布局、PC和移动端适配方案

    春招真的是太卷了,让我怀疑春招到底在招谁(是我太菜惹qaq)。总之还是不能松懈下来,总结一下在实习期间遇到的h5的响应式布局、PC和移动端适配方案的选择以及一些问题。本文部分文案由chat-gpt编写,例如介绍响应式布局的文案(才不是因为我懒~)。 响应式布局是指

    2024年02月05日
    浏览(33)
  • Vue中如何进行移动端适配与响应式布局?

    如今,移动端适配与响应式布局已经成为Web开发中不可或缺的一部分。Vue.js作为一款流行的JavaScript框架,也提供了许多有用的工具和技术来实现移动端适配和响应式布局。在这篇文章中,我们将讨论如何在Vue.js中进行移动端适配与响应式布局,包括媒体查询、flexbox布局和第

    2024年02月09日
    浏览(32)
  • uniapp B站iframe嵌入APP及视频全屏不横屏问题处理 Android端

    问题:视频界面能进入全屏,但视频不横屏 方法一 :视频界面设置允许横屏,手机竖屏锁定取消。(未采用) 效果及问题:全屏后,手机横屏后,视频会横屏。但取消全屏后,视频界面还是横屏着,体验不太好。 方法二 :视频界面设置允许横屏,通过onResize监听窗口尺寸变

    2024年02月03日
    浏览(34)
  • Winform中实现窗体控件适配(自适应窗体)布局_通过C#代码方式

    即:未启用控件缩放效果代码时,控件内容都是固定在窗体界面的指定位置,不会跟随窗体的拉伸,放大而进行适配,如下图所示: 即:启用控件缩放效果代码时,控件内容会跟随窗体的拉伸,放大而进行适配,如下图所示: 实现思路是: ①在窗体初始化时先获取窗体的宽

    2023年04月17日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包