android屏幕 单位转换

本文深入探讨了Android内部如何通过TypedValue.applyDimension函数实现不同单位间的转换,重点介绍了从px到dip、sp、pt、in、mm等单位的换算方法,并提供了实用的转换工具类。此外,文章还详细阐述了如何利用DisplayMetrics参数确保尺寸和文字大小在不同设备上的适配性。

在android内部会使用TypedValue.applyDimension函数将所有单位换算成px。

 1 public static float applyDimension(int unit, float value,
 2                                    DisplayMetrics metrics)
 3 {
 4     switch (unit) {
 5     case COMPLEX_UNIT_PX:
 6         return value;
 7     case COMPLEX_UNIT_DIP:
 8         return value * metrics.density;
 9     case COMPLEX_UNIT_SP:
10         return value * metrics.scaledDensity;
11     case COMPLEX_UNIT_PT:
12         return value * metrics.xdpi * (1.0f/72);
13     case COMPLEX_UNIT_IN:
14         return value * metrics.xdpi;
15     case COMPLEX_UNIT_MM:
16         return value * metrics.xdpi * (1.0f/25.4f);
17     }
18     return 0;
19 }
public static float applyDimension (int unit, float value, DisplayMetrics metrics)
Since: API Level 1

Converts an unpacked complex data value holding a dimension to its final floating point value. The two parameters unit and value are as in TYPE_DIMENSION.

Parameters
unitThe unit to convert from.
valueThe value to apply the unit to.
metricsCurrent display metrics to use in the conversion -- supplies display density and scaling information.
Returns
  • The complex floating point value multiplied by the appropriate metrics depending on its unit. 

 

这里也给一个[男人应似海http://www.cnblogs.com/wader2011/archive/2011/11/28/2266684.html]写的转换工具类。

 1 /**
 2  * Android大小单位转换工具类
 3  * 
 4  * @author wader
 5  * 
 6  */
 7 public class DisplayUtil {
 8  /**
 9   * 将px值转换为dip或dp值,保证尺寸大小不变
10   * 
11   * @param pxValue
12   * @param scale(DisplayMetrics类中属性density)
13   * @return
14   */
15  public static int px2dip(float pxValue, float scale) {
16   return (int) (pxValue / scale + 0.5f);
17  }
18 
19  /**
20   * 将dip或dp值转换为px值,保证尺寸大小不变
21   * 
22   * @param dipValue
23   * @param scale(DisplayMetrics类中属性density)
24   * @return
25   */
26  public static int dip2px(float dipValue, float scale) {
27   return (int) (dipValue * scale + 0.5f);
28  }
29 
30  /**
31   * 将px值转换为sp值,保证文字大小不变
32   * 
33   * @param pxValue
34   * @param fontScale(DisplayMetrics类中属性scaledDensity)
35   * @return
36   */
37  public static int px2sp(float pxValue, float fontScale) {
38   return (int) (pxValue / fontScale + 0.5f);
39  }
40 
41  /**
42   * 将sp值转换为px值,保证文字大小不变
43   * 
44   * @param spValue
45   * @param fontScale(DisplayMetrics类中属性scaledDensity)
46   * @return
47   */
48  public static int sp2px(float spValue, float fontScale) {
49   return (int) (spValue * fontScale + 0.5f);
50  }
51 }

 

 

 

 

转载于:https://www.cnblogs.com/zhouchanwen/archive/2012/10/20/2731984.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值