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()。

おすすめ

転載: blog.csdn.net/qingyunhuohuo1/article/details/109379773