Android用命名含sw的文件夹做屏幕适配原理
来源:互联网 发布:微机室网络还原软件 编辑:程序博客网 时间:2024/04/30 03:12
基本概念
说到用命名含sw的文件夹做屏幕适配之前先说以下几个基本概念:
屏幕尺寸
屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米
比如常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等
屏幕分辨率
屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080。目前市场主流分辨率有八种:1280*720、1920*1080、2560*1440、800*480、1184*720、960*540和854*480。
dpi(Dot per inch)
dpi是屏幕像素密度,假如一英寸里面有160个像素,这个屏幕的像素密度就是160dpi。mdpi、hdpi、xdpi、xxdpi用来修饰Android中的drawable文件夹及values文件夹,用来区分不同像素密度下的图片和dimen值。
那么如何区分呢?Google官方指定按照下列标准进行区分:
dp/dip
dip和dp是一个意思,都是Density Independent Pixels的缩写,即密度无关像素,规定以160dpi为基准,1dip=1px,如果密度是320dpi,则1dip=2px,以此类推。
desity
密度,表示一个dp多少个像素。desity = dpi/160,dp = desity*px
SW的适配原理
SW全称是Smallest Width,表示最小宽度,例如一个适配文件夹values-sw411dp
表示如果手机的最小宽度是411dp,那么就命中该文件夹,使用的配置都是这个文件夹下的。代码中可以用getResources().getConfiguration().smallestScreenWidthDp
获取sw
sw的理论上计算原理
其实这就是一道初中计算题,例如:已知一个5.1寸手机的分辨率为1440*2560(2k屏),求sw?
解析:sw = 1440/desity,desity = dpi/160,dpi = 对角线像素/屏幕尺寸,对角线像素用勾股定理求,多么简单的一道题。
答:
理论上是这样的,实际真的是这样吗?
实际结果
调用getResources().getConfiguration().smallestScreenWidthDp
获取结果是411
,也就是说sw = 411dp
,这个时候不淡定了,适配这个手机要用values-sw411dp
而不是上面计算的values-sw400dp
。
原理解析
查看系统源码:
density = DENSITY_DEVICE / (float)DENSITY_DEFAULT;
也就是:
density = getDeviceDensity() / (float)160;
getDeviceDensity()源码:
private static int getDeviceDensity() { return SystemProperties.getInt("qemu.sf.lcd_density",SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT));}
这个方法是获取设备密度,这个密度是通过系统的配置项qemu.sf.lcd_density
或者ro.sf.lcd_density
指定的。为了验证我们的猜想,我们用adb shell看看能不能找到这个配置项。
shell@trltechn:/ $ cd systemshell@trltechn:/system $ cat build.prop|grep density ro.sf.lcd_density=640
因为两个字符串里都含有density,所以我们模糊查询density,果然被我们找到了其中的一个字段ro.sf.lcd_density
,所以设备的dpi是以系统指定为准,这个时候我们再次计算:
答案与代码获取一样,这就可以很稳的用
values-sw411dp
去适配了。- Android用命名含sw的文件夹做屏幕适配原理
- 【android】图片放错文件夹引起显示大小不同的原因与屏幕适配原理
- Android屏幕values-sw适配
- Android屏幕适配小技巧sw<n>dp
- Android屏幕适配小技巧sw<n>dp
- Android屏幕适配小技巧sw<n>dp
- Android屏幕适配小技巧sw<n>dp
- Android屏幕适配小技巧sw<n>dp
- Android屏幕适配小技巧sw<n>dp
- Android屏幕适配小技巧sw<n>dp
- Android屏幕适配小技巧sw<n>dp
- Android屏幕适配小技巧sw<n>dp
- Android屏幕适配小技巧sw<n>dp
- Android屏幕适配原理
- Android屏幕适配原理
- Android屏幕适配原理
- Android屏幕适配原理
- Android屏幕适配原理
- C++第4次实验 项目6:输出星号图
- 看板中的粉色卡
- servlet重定向到jsp后,css样式和图片都没了,解决办法
- 二叉树的插入函数
- Ubuntu16.04+Pycharm+Anaconda配置
- Android用命名含sw的文件夹做屏幕适配原理
- 数据结构-图的基本概念
- 监测同名进程,防止重复调用
- TCP 与 UDP
- Java8学习笔记之Lambda表达式
- Leetcode 297. Serialize and Deserialize Binary Tree
- 供个人开发者免费使用的一些API接口网站推荐
- 【WebLogic使用】5.WebLogic创建虚拟主机和绑域名
- springmvc配置文件web.xml中/与/*的区别