Android屏幕适配 - 屏幕基础理论知识笔记;res资源文件命名与匹配规则
来源:互联网 发布:linux 查看swap 编辑:程序博客网 时间:2024/06/03 16:43
Android开发中,屏幕适配是十分让人头疼的问题,最近打算好好研究下适配的解决方案,主要参考官方文档及论坛上大神们的方法(我崇拜的鸿洋大神等);首先,先熟悉点基础知识。
常用单位
px:pixel //像素
in:inch //英寸
mm: 毫米
pt : 1/72英寸
dpi : dots peer inch //一英寸长的直线上的像素点的数量,即像素密度
dp(dip): Density-independent pixel //密度无关像素,定义为160dpi的屏幕下,1个像素点的长度
sp: Scale-independent Pixels //专用于设定文字大小,和dp类似,但是它除了收到dpi影响,还受到用户的字体偏好设定影响
屏幕的物理尺寸:屏幕对角线的长度,以inch为单位
分辨率:屏幕上长宽方向上像素点的数量,例如A80为全高清屏,即1080*1920的分辨率 //也称想对分辨率(使用这种说法一般认为,dpi才是真正的分辨率)
android.util.TypedValue类提供了一个函数,支持把所有的单位换算到px,实现代码如下:
/** * Converts an unpacked complex data value holding a dimension to its final floating * point value. The two parameters <var>unit</var> and <var>value</var> * are as in {@link #TYPE_DIMENSION}. * * @param unit The unit to convert from. * @param value The value to apply the unit to. * @param metrics Current display metrics to use in the conversion -- * supplies display density and scaling information. * * @return The complex floating point value multiplied by the appropriate * metrics depending on its unit. */ public static float applyDimension(int unit, float value, DisplayMetrics metrics) { switch (unit) { case COMPLEX_UNIT_PX: return value; case COMPLEX_UNIT_DIP: return value * metrics.density; case COMPLEX_UNIT_SP: return value * metrics.scaledDensity; case COMPLEX_UNIT_PT: return value * metrics.xdpi * (1.0f/72); case COMPLEX_UNIT_IN: return value * metrics.xdpi; case COMPLEX_UNIT_MM: return value * metrics.xdpi * (1.0f/25.4f); } return 0; }
概括来说对于多设备适配经验的小总结
1,使用简洁的风格来设计UI,让界面变得简单并且一体化,使UI有更好的适应能力。
2,尽量使用match_parent,wrap_content等属性来实现UI的自适应,减少dp的使用,尽量不要使用px。
3,如果使用dp,那么不要在layout文件中显式的设定数值,而是通过dimens文件来引用,不同设备上就可以使用同一份layout,而通过不同的dimens来适配。
4,可以的情况下,尽量使用.9的png文件,通过无损的缩放来适应UI。
5,有些的XML上很难设定的UI细节,可能可以通过Java代码动态调整的方案来解决。
6,如果有需要的话,可以通过w720dp,h360dp,1024*768等属性来对市面上销量检查UI效果。
Res资源文件下命名方式与要求
1,命名不区分大小写;
2,命名形式:资源名-属性1-属性2-属性3-属性4.........
资源名就是资源类型名,包括:drawable,values,layout,anim,raw,menu,color,animator,xml;
属性1-属性2-属性3-属性4........就是上述的属性集内的属性,如:-en-port-hdpi
注意:各属性的位置顺序必须遵守优先级从高到低排列!否则编译不过。
实例说明命名规则
1,把全部属性都用上的例子(各属性是按优先级先后排列出来的)
values-mcc310-en-sw320dp-w720dp-h720dp-large-long-port-car-night-ldpi-notouch-keysexposed-nokeys-navexposed-nonav-v7
2,上面例子的中文说明
values-mcc310(sim卡运营商)-en(语言)-sw320dp(屏幕最小宽度)-w720dp(屏幕最佳宽度)-h720dp(屏幕最佳高度)-large(屏幕尺寸)-long(屏幕长短边模式)-port(当前屏幕横竖屏显示模式)-car(dock模式)-night(白天或黑夜)-ldpi(屏幕最佳dpi)-notouch(触摸屏幕类型)-keysexposed(键盘类型)-nokeys(硬按键类型)-navexposed(方向键是否可用)-nonav(方向键类型)-v7(Android版本)
定位最佳文件夹
1,定位算法
特殊说明:关于屏幕大小size相关的属性不在步骤1的过滤清除条件里(dpi属性和screen size属性):
1)对于dpi属性系统的选择方法是best match;即如果没有找到准确的属性,可以接着寻找最接近的属性文件夹。
例如:g7手机,应该是values-hdpi,但如果没有values-hdpi,则可以找出最接近的文件夹(先找alues-xhdpi到alues-mdpi到alues最后到alues-ldpi,系统认为values比values-ldpi更接近我的values-hdpi属性);
2)对于screen size
属性系统的选择方法是向下best match;即如果没有找到准确的属性,只可以接着在比自身属性小的文件夹里找最近的属性文件夹。例如:g7手机,应该是values-normal,但如果没有values-normal,则可以找出最接近的文件夹(先找values再到values-small,注意,系统认为values比values-small更接近我的values-normal属性,但之后就不会再找values-large与values-xlarge了,因为是向下best match,large与xlarge都比normal大)。
Android屏幕适配-资源文件夹命名与匹配规则
参考: Android多屏幕适配学习笔记
- Android屏幕适配 - 屏幕基础理论知识笔记;res资源文件命名与匹配规则
- Android屏幕适配-资源文件夹命名与匹配规则 res文件夹
- Android屏幕适配-资源文件夹命名与匹配规则
- Android屏幕适配-资源文件夹命名与匹配规则
- Android屏幕适配-资源文件夹命名与匹配规则
- Android屏幕适配-资源文件夹命名与匹配规则
- Android屏幕适配-资源文件夹命名与匹配规则
- Android资源文件res下文件夹的后缀,适配不同屏幕。
- res资源命名规则
- Android屏幕资源匹配顺序
- Android屏幕适配规则
- Android屏适配-资源文件夹命名与匹配规则
- android屏幕适配知识
- Android资源文件命名规则
- Android资源文件命名规则
- Android多屏幕适配---文件夹命名
- android res目录资源文件适配
- android多屏幕自适应适配规则
- DialogFragment设置不可取消
- USACO1.1.2gift
- android 电话状态的监听(来电和去电)
- systemctl命令完全指南
- 搜索树和链表实现的堆
- Android屏幕适配 - 屏幕基础理论知识笔记;res资源文件命名与匹配规则
- Java JVM:垃圾回收问题
- sip RFC3261 中文版
- EventBus使用详解(一)——初步使用EventBus
- get方式数据获取
- Jenkins入门系列之——00答疑解惑
- 此证书签发者无效,发布证书已丢失, Download and Install the Renewed Intermediate Certificate
- Upyun 图片存储
- js获取浏览器滚动条距离顶端的距离