Android : dip/dppx(pixel)之间的相互转换

Author : Aoyousatuo Zhao

http://blog.sina.com.cn/aoyousatuo

 

Android应用的开发过程中,我们常常需要给组件布局定位。这就涉及到Android常用的两个计量单位dip/dp, px.下面笔者就这两个单位做一个简要的介绍。

dip或者dpdevice independent pixels(设备独立像素)的缩写。这个单位提出的目的主要是为了让应用的UI布局适应各种分辨率的显示设备。Android会将dp最终转换成具体显示设备的像素数,这样就提高了程序的可移植性。

pxpixel的缩写,它表示一个实实在在的物理像素。这个单位使用起来比较方便,但是组件一旦定位就固定了,它不会随着设备的分辨率不同而改变,使用该单位的程序可移植性较差。

举个例子,在400像素宽的屏幕上从第0个像素到第399个像素画一条横线,我们可以看到这条线横向贯穿了整个屏幕,然后我们将相同的画线程序运行在800像素宽的屏幕上,则我们只能看到这条线只有屏幕的一半。如果换作dp为单位,则在这两种分辨率的屏幕上的线基本都横向贯通。

所以在开发中,为了提高程序对各种设备的适应性,我们最好使用dp或者dip为单位。知道了这两个单位的特点,问题就来了。我们发现虽然一些组件可以在布局文件中通过dip或者dp单位来定构。但是,组件类的相关方法却只能以像素为单位。例如,设置GridView组件类的列间距。这种情况下就涉及到了dip/dppx之间的相互转换。笔者直接给出两个方法大家就清楚了,请看:

 

public int dip2px(Context context, float dipValue)

{

float m=context.getResources().getDisplayMetrics().density ;

return (int)(dipValue * m + 0.5f) ;

}

 

public int px2dip(Context context, float pxValue)

{

   float m=context.getResources().getDisplayMetrics().density ;

   return (int)(pxValue / m + 0.5f) ;

}

 

更多相关文章

  1. AndroidManifest.xml学习
  2. 【Android布局】在程序中设置android:gravity 和 android:layout
  3. 关于Android四大基本组件介绍与生命周期
  4. Android组件化方案
  5. 编写自定义的 Android(安卓)Preference 组件
  6. Android文档——进程优先级与线程
  7. android 分辨率问题
  8. 疯狂android讲义---intent-filter
  9. XML中的命名空间问题

随机推荐

  1. android traceview and dmtracedump使用
  2. Android(安卓)布局
  3. Android(安卓)UI大杂烩
  4. Android(安卓)TextView背景色、圆角、内
  5. Android(安卓)获取地理位置的经度和纬度
  6. 设置行距
  7. Dealing with dependencies in Android(
  8. android 动作处理之手势捕捉
  9. Android(安卓)JNI环境搭建及开发入门
  10. [Android]Android数据的四种存储方式