当前位置: 首页 > news >正文

Android中横屏适配以及各个屏幕之间的适配

在android开发中,需要适配各个不同的屏幕和像素,因为android的设备千变万化,而且还有各种平板和横屏设备,那么针对适配的技术难点和知识做一个汇总

1、首先说一下横屏设备的适配

横屏的展示如果和竖屏的展示不一样的话,那就需要单独写一份xml的配置文件了,在res下->ayout下建一个文件夹取名叫layout-land,意思是横屏的意思,里面如果哪一个lauout文件和竖屏不一样的话,就单独排版。但必须需要竖屏下的id有的话,横屏上最好也有,保持一致即可,如果横屏的元素多的话,也可以多一些元素,比如竖屏上没有某一个按钮,但是横屏上有的话。在java或者kotlin文件中需要单独判断横竖屏分开写相关逻辑,判断横竖屏可以根据以下方法:

if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// 横屏
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
// 竖屏
}
或者

if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// 横屏
} else if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
// 竖屏
}

也可以在横屏中的base的xml文件中单独多出来一个empty的view,在一个公共的工具类中做一个判断,view v = findViewById(R.id.empty),如果v!=null,就是横屏,反之则为竖屏。

然后那一个配置文件不一样就单独写一份,drawable-land,color-land等;这里着重说一下values-land,这个文件有如果有不同像素的话,就需要建立很多像素的配置文件,不管横竖屏。这个放到后面屏幕的适配中再说。

通过以上,就知道了横屏中的相关适配工作了,就是配置文件根据横屏的不同建立不同的配置文件,在java逻辑代码中在根据不同的逻辑区分横竖屏写各自的逻辑即可。如果有动态布局加载的话,也需要根据横竖屏判断是否各自加载。

2、不同屏幕的适配

Android手机以及android设备千变万化,我们开发工作繁重艰巨。那么针对这么多的设备怎么做适配呢,当然还有黑夜和白天主题模式,还有国际化适配等。

上面以及提到根据不同的像素建立个字的配置文件,你的layout也可以建立不同的配置文件。比如layout-sw720,layout-sw800,这里说一下后面这个数字的含义。

如果我们有真机的话最好,没有真机的话,就需要建立不同像素下的虚拟机去调试。先说真机怎么调试。我们的真机的像素又是在那一个数字范围内呢。

比如你现在有一款手机,打开设置中的关于设备。里面会找到这款手机的分辨率。比如分辨率1920x1080,还有屏幕的尺寸(5.9)那么这个分辨率怎么和上面那个sw后面的数字建立连接呢。

在 Android 开发中,像素尺寸关系主要涉及以下几个核心单位及其相互转换:

1. ‌像素(px)

  • 定义‌:物理像素,是屏幕上的最小发光点。
  • 特点‌:不同设备的像素大小不同,直接使用 px 会导致界面在不同设备上显示不一致。

2. ‌密度无关像素(dp/dip)

  • 定义‌:一种基于屏幕密度的抽象单位,用于解决不同屏幕密度下的显示一致性问题。
  • 基准‌:以 160 dpi(mdpi)为基准,1 dp = 1 px。
  • 换算公式‌:px = dp × (dpi / 160)
  • 用途‌:推荐用于布局尺寸(如控件宽高、边距等)。

3. ‌可缩放像素(sp)

  • 定义‌:与 dp 类似,但会根据用户的字体大小首选项进行缩放。
  • 用途‌:专门用于文字大小设置,确保字体在不同设置下可读性良好。

4. ‌屏幕密度等级

Android 将屏幕密度划分为以下等级,以 160 dpi 为基准:

表格

密度等级对应 dpi缩放比例
ldpi1200.75x
mdpi1601x
hdpi2401.5x
xhdpi3202x
xxhdpi4803x
xxxhdpi6404x

例如,在 xxhdpi 设备上,1 dp = 3 px;在 xhdpi 上,1 dp = 2 px。

5. ‌单位换算关系

  • dp 到 px‌:px = dp × (dpi / 160)
  • sp 到 px‌:px = sp × scaledDensity,其中scaledDensity会根据系统字体大小调整。

6. ‌使用建议

  • 布局尺寸‌:统一使用 dp,确保在不同密度设备上显示一致。
  • 文字大小‌:使用 sp,以适配用户字体偏好。
  • 资源文件‌:为不同密度提供多套图片资源(如drawable-mdpi,drawable-xhdpi),或优先使用矢量图。

7. ‌实际开发中的获取方式

在代码中可以通过DisplayMetrics获取屏幕密度信息:

DisplayMetrics dm = getResources().getDisplayMetrics();

float density = dm.density; // dp 到 px 的缩放系数

int densityDpi = dm.densityDpi; // 实际 dpi

通过以上方式,开发者可以动态适配不同屏幕密度的设备,保证界面在各种设备上都能良好显示。

我们举个例子:

我们在新建虚拟机时,create virtual device

右侧有一个手机形状的参数

上面就是1280x720,这就是像素点。4.65就是尺寸,这些都可以改的,最下面有一个Density时320dpi,根据dp 到 px‌:px = dp × (dpi / 160),那么就是320/160=2,比例就是2,所以我们sw后面的那个值就是720/2 = 360,我们建立配置文件就是values-sw360了。这里sw值得width所以上面时720/2,如果是高度就是sh。

上面是我们建立虚拟机相关参数都是知道的,那么真机的怎么建立一个虚拟机和他一样呢,

这就需要我们执行一个adb的指令获取设别的像素点density,这个可以说是密度吧

adb shell wm density

比如获取到的数字是320,那么我们可以根据上面的步骤建立一个和真机一样的虚拟机调试了。

当然我们可以建立一个虚拟机修改其配置参数,怎噩梦修改呢?

我们建立一个大众的虚拟机后,

通过上面打开这个虚拟机的物理路径,在里面找到config.ini

通过vscode打开配置文件修改里面这几个参数就可以自定义自己的虚拟机了

这个可以根据你获取到的参数去配置自己的设备了。

这个配置文件其实可以在最大众的一款设备上调试好后,问ai让他给你给你生成其他像素的配置文件即可。

以上就是Android的配置的全部内容了,制作不易,多多关注!

http://www.jsqmd.com/news/471537/

相关文章:

  • 计算机毕业设计springboot社区养老服务系统的设计与开发 基于SpringBoot的社区智慧养老服务平台的设计与实现 基于Java的社区居家养老综合服务管理系统的设计与开发
  • 2026年口碑不错的DLC涂层机生产厂家,性价比高的有哪些品牌 - 工业设备
  • FireRedASR-AED-L WebUI界面自定义与功能扩展效果展示
  • 2026 年全国透光混凝土优质厂商盘点 全场景项目选型实用参考指南 - 深度智识库
  • OpenClaw 腾讯云 (大龙虾AI)保姆级教程
  • 基于分布式优化的多产消者非合作博弈能量共享:MATLAB 实现探索
  • MySQL中的视图
  • 2026年通风系统核心部件推荐:从风阀看西北市场的“硬实力”制造商 - 深度智识库
  • ARM64 多级页表映射机制与Linux内核实现剖析
  • 说说华南地区靠谱的DLC涂层机供应商推荐,哪家性价比高 - 工业品网
  • AutoGen Studio区块链应用:智能合约审核智能体
  • 前端就业必需技能全景图——你的最强工作指南
  • 【技术融合】DAS与主动震源协同:解锁井间地震高分辨率成像新范式
  • 瑞祥黑金卡回收,市场机制与选择逻辑,存量卡片价值释放 - 京回收小程序
  • 2026年淄博靠谱建材公司排名,山东宝盖新材料创新能力强口碑好 - 工业设备
  • 面向人工智能系统的网络威胁情报
  • Ostrakon-VL-8B识别效果极限挑战:复杂光线与遮挡下的菜品分析
  • RAG中递归分块Recursive Chunking
  • 炸裂级!提示工程架构师用提示工程突破大数据分析瓶颈
  • 语音情感识别新体验:Emotion2Vec+ Large WebUI界面,操作简单效果惊艳
  • SolidWorks 6-6、拉伸终点的其它方式与拔模
  • 【PHP 8.9类型系统终极前瞻】:20年核心贡献者独家解密RFC草案未公开的5大类型安全增强机制
  • 避坑指南:万爱通礼品卡回收注意事项你必须知道! - 团团收购物卡回收
  • [Wokwi模拟器] ESP32物联网实战(四):MQTT协议、云端数据上报与智能家居场景模拟
  • 链表----环形链表II
  • 基于STM32单片机超声波测速测距防撞报警设计+DS18B20温度液晶显示及补偿及滤波算法设计26-052
  • 不止“996”!曝硅谷AI创业圈「极限工作制」:每天16小时、凌晨3点下班、周末也在写代码
  • 避坑指南:SparkSQL临时表创建时最容易忽略的3个问题(内存泄漏/命名冲突/会话隔离)
  • 新质生产力下的新能源革命:电流传感器如何助力能源系统智能升级?
  • 【开集检测新范式】Grounding DINO:多阶段融合的视觉语言Transformer如何革新目标检测?