Android中的尺寸单位以及使用TypedValue.applyDimension()将尺寸转换为标准尺寸
文章目录
一、Android中的尺寸单位
1.1 in
设备相关单位。inch 表示英寸,是屏幕的物理尺寸,是屏幕的对角线长度。每英寸等于 2.54 厘米。
1.2 mm
设备相关单位。表示毫米,也是屏幕的物理尺寸。
1.3 px
设备相关单位。pixel 表示屏幕的实际像素。
1.4 pt
设备相关单位。表示一个点,大小为 1/72 英寸(in),是屏幕的物理尺寸。
1.5 dp
设备无关单位。dp 即 dip,Device Independent Pixel(设备无关像素)。一个 dp 相当于 160dpi 屏幕中的一个 px。在320dpi的屏幕中,一个dp相当于2个px。
1.6 sp
设备无关单位。Scale Pixel(比例像素)。是字体大小单位。使用 dp 作为单位设置字体大小时,字体大小不会随着系统字体大小而改变;使用 sp 作为单位设置字体大小时,字体大小会随着系统字体大小而改变。
附:dpi(度量单位)
Dots per inch 每英寸像素数。对于一台分辨率为 240x320,屏幕物理尺寸为 1.5英寸 x 2英寸 的手机,他的密度为 240/1.5 或者 320/2,密度为 160dpi。
二、使用TypedValue.applyDimension()将尺寸转换为标准尺寸
Android 中的标准尺寸为 px,我们可以使用 TypedValue.applyDimension() 方法将其它的尺寸单位转换为 px。
TypedValue.applyDimension() 方法的源代码如下所示:
/**
* 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;
}
具体使用:
- dp → px:TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, applicationContext.resources.displayMetrics);
- sp → px:TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, value, applicationContext.resources.displayMetrics);
- pt → px:TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PT, value, applicationContext.resources.displayMetrics);
- in → px:TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_IN, value, applicationContext.resources.displayMetrics);
- mm → px:TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, value, applicationContext.resources.displayMetrics);
说明:value 即为想进行转换的数值,数据类型为浮点数。此代码为 Kotlin 代码,若为 Java 代码,则将 applicationContext.resources.displayMetrics 替换为 context.getResources().getDisplayMetrics()。