Android 屏幕适配有多种方式,本文介绍下最小宽度限定符适配。 1) Android 屏幕适配概念 物理像素点(px) : 代表的是手机的物理像素点 密度无关像素(dp): 密度无关像素等于160dpi 屏幕上的一个物理像素,这是...
Android 屏幕适配有多种方式,本文介绍下最小宽度限定符适配。
1) Android 屏幕适配概念
物理像素点(px) : 代表的是手机的物理像素点
密度无关像素(dp): 密度无关像素等于160dpi 屏幕上的一个物理像素,这是系统的基线密度
屏幕密度(dpi) : 屏幕每英寸上的像素点,Android 将所有的屏幕密度分组为6中通用密度:低(ldpi), 中(mdpi), 高(hdpi), 超高(xhdpi),
xxhdpi 和xxxhdpi.
分辨率:屏幕上物理像素的总数。
关于px, dp,dpi 之间的转换公式:
px = dp * (dpi / 160).
2) Android 中swdp限定符适配原理:
smallesWidth 限定符适配原理与 屏幕分辩率限定符适配原理一样, 系统都是根据限定符去寻找对应的dimens.xml 文件。区别在于屏幕分辨率限定符适配是拿px 值等比例缩放,而smallestWidth 限定符适配是拿dp 值等。 "最小宽度"是不区分方向的,即无论是宽度还是高度,哪一边小就认为哪一边是最小宽度。
最小宽度限定符适配好处:
需要的dimens.xml 文件少, 无论手机的屏幕像素多少,密度多少, 90%的手机的最小宽度都为360dp, 所以采用最小宽度适配只需要少量dimens.xml 文件。
最小宽度限定符适配匹配原则:
例如设备最小宽度是360dp, 就会先去找values-360dp, 发现会向下找values-320dp, 如果还是没有才找默认的values下的dimens.xml .
swdp 限定符N的计算公式:
N = width / (dpi / 160), width 为"最小宽度"
3) 使用步骤:
1) 生成所有设备对应的dimens.xml 文件, 可以采用工具 生成。 需要适配的最小宽度值为 320,360, 384 ,392,400,410,411,428,432,480,533,592,600,640,662,720,768,800,811,820,960,1024,1280,1365 (包含了平板和TV).
生成的dimens.xml 文件如下:
2) 根据设计图标注, 标注多少px, 布局中就写多少px, 格式如 @dimen/px_XX
机型:三星Note8 默认最小宽度:411dp 设置步骤:1、开发者选项;2、最小宽度 作用:全局改变显示内容大小。
机型:三星Note8
默认最小宽度:411dp
设置步骤:1、开发者选项;2、最小宽度
作用:全局改变显示内容大小。
采用最小宽度适配方式计算各分辨率下的尺寸大小,参考:https://mp.weixin.qq.com/s/X-aL2vb4uEhqnLzU5wjc4Q 由于px =dp(dpi/160), 所以dp = px/(dpi/160)。 //dp = 160 作为基准尺寸的倍数关系 Reslution dpi ...
采用最小宽度适配方式计算各分辨率下的尺寸大小,参考:https://mp.weixin.qq.com/s/X-aL2vb4uEhqnLzU5wjc4Q
由于px = dp(dpi/160),
所以dp = px/(dpi/160)。
//dp = 160 作为基准尺寸的倍数关系
Reslution dpi pixel ratio
xxxhdpi 640 4
xxhdpi 480 3
xhdpi 320 2
hdpi 240 1.5
mdpi 160 1
UI设计尺寸:750 x 1334 , dpi = 320 , screenWidthDp = 750/(320/160) = 375,以此UI设计尺寸作为基准。
基准:1dp = 1dp = 2px
dpi = 320 --> 1dp = 1 * (375 / 375) = 1dp
dpi = 480 --> 1dp = 1 * (480 / 375) = 1.28dp
dpi = 640 --> 1dp = 1 * (640 / 375) = 1.7dp
dpi = 240 --> 1dp = 1 * (240 / 375) = 0.64dp
dpi = 160 --> 1dp = 1 * (160 / 375) = 0.426dp
//根据屏幕最小宽度的dp值创建文件夹
swdp 倍数关系
values-sw240dp 1dp = 0.64dp
values-sw320dp 1dp = 0.85dp
values-sw360dp 1dp = 0.96dp
values-sw375dp 1dp = 1dp
values-sw400dp 1dp = 1.06dp
values-sw480dp 1dp = 1.28dp
values-sw600dp 1dp = 1.6dp
values-sw720dp 1dp = 1.92dp
values-sw800dp 1dp = 2.13dp
values-sw820dp 1dp = 2.18dp
该倍数关系是以 750 x 1334 , dpi = 320 , sw-dp = 375作为基准的,如果以其他尺寸作为基准,则需要重新计算倍数关系
之前手比较贱,想试试最小dp最大可以调多少,主要是想方便提取文字,我的小米8调成800还可以,之后脑子一热调成1200。然后直接弹回桌面然后就黑屏了,之后自动开机就进入了recovery,然后开机就会直接进recovery。...
之前手比较贱,想试试最小dp最大可以调多少,主要是想方便提取文字,我的小米8调成800还可以,之后脑子一热调成1200。然后直接弹回桌面然后就黑屏了,之后自动开机就进入了recovery,然后开机就会直接进recovery。这下我可慌了,我想恢复出厂应该能解决,但是我的万顷数据就没有了,好多数据还没备份呢。
在百度上找了找,还好,搜了3次就找到了解决办法,而且不用清除数据。见https://zhidao.baidu.com/question/525281068090476925.html,多谢这位大佬提供的方法。于是我在命令行输入adb,可是没有反应啊,百度才知道还要安装。大家百度上随便搜一个adb安装就可以了,如果安过Android sdk的话目录里边都有,我也是安完才发现。
之后我输入adb shell wm density 360(我用的powershell后面加&&会显示“标记“&&”不是此版本中的有效语句分隔符。”,我便把后面的去掉了),却显示error:closed。惨了,貌似关机不能执行,我试了很多shell命令都不行,况且我的手机还是处于连接小米助手模式的,网上貌似也说关机不能执行adb命令。
于是我万念俱灰的用adb执行reboot命令希望奇迹能够出现,这时我灵光一现,既然关机不能执行,那在开机过程是否可以执行呢?于是我立刻输入了adb shell wm density 360命令,这时奇迹出现了!居然没有报错!可惜手机还是回到了recovery,然后我再次重启,居然成功进入了系统!太激动了,终于见到了久违的锁屏界面。瞬间觉得自己太聪明了。不过开机后最小dp却设置的480,不知道为什么。
总结一下,手机连接电脑,在命令行中输入
adb shell wm density 360
指令并执行,如果不行那在开机过程中执行,再重启应该可以进入系统。如果还不行那我就没办法了,可能就只有考虑恢复出厂了,或者重新刷一次系统也许可以解决,又或者可以考虑刷入能备份数据的recovery备份数据。
有了这次教训,以后怕是不敢手贱了。不过最小dp调大了感觉手机瞬间变平板,感觉还是很酷的。
一般我们需要的宽度和高度都是需要dp格式,但是在网上找了一大堆的资料基本上得到的宽度和高度都是像素(Pixels)型的宽度和高度,与我们所需要的不一样,后面经过查找资料终于找到解决办法,下面上代码,老鸟勿喷 ...
Androiddp方式的屏幕适配-原理 传统所说的屏幕适配,其实是针对不同屏幕的UI尺寸适配,即在编写页面时使用了具体的dp、sp值后导致的其他问题。 我之前写过一些相关的文章和工具插件,也收到了很多网友的反馈。 ...
这几天做关于平板的项目,发现用之前的多屏幕适配方案,会直接运行闪退,报的错误是找不到指定的资源,克服了懒惰的心,翻墙查了api文档。找到了问题。记录下来。 Android多屏幕适配-手机1、如何划分手机和平板的 ...
smallestWidth 翻译为中文的意思就是最小宽度,那这个最小宽度 是什么意思呢? 系统会根据当前设备屏幕的最小宽度 来匹配 values-swdp,为什么不是根据 宽度 来匹配,而要加上 最小 这两个字呢? 这就要说到,...
最近做一个项目需要适配到不同的平板和手持设备上,在屏幕适配上遇到了一些问题,查了Android官方文档了解了一些技巧的,现在总结如下: 先解释几个概念: 1、dpi(dot per inch),即每英寸像素,所有的android...
=DP