您的位置:首页 > 移动开发 > Android开发

Android中的尺寸单位2

2014-04-01 10:11 411 查看
px(Pixels ,像素):对应屏幕上的实际像素点。

in(Inches ,英寸):屏幕物理长度单位。

mm(Millimeters ,毫米):屏幕物理长度单位。

pt(Points ,磅):屏幕物理长度单位,1/72英寸。

dp(与密度无关的像素):逻辑长度单位,在 160 dpi 屏幕上,1dp=1px=1/160英寸。随着密度变化,对应的像素数量也变化,但并没有直接的变化比例。

dip:与dp相同,多用于Google示例中。

sp(与密度和字体缩放度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放。

一直对px、dip、sp、dp这几个单位概念很模糊。网上查了下,基本理论上是清楚了。

1.px (pixels)(像素):屏幕上的点 ,与密度相关。密度大了,单位面积上的px会比较多。

2.dip或dp(与密度无关的像素)。这个和设备硬件有关,为了支持WVGA、HVGA和QVGA 5进制空间推荐使用这个。一种基于屏幕密度的抽象单位。设置一些view的宽高可以用这个,一般情况下,在不同分辨率,都不会有缩放的感觉。如果用px的话,320px占满HVGA的宽度,到WVGA上就只能占一半不到的屏幕了,那一定不是你想要的。
3.sp(与刻度无关的像素)放大像素– 主要处理字体的大小。

屏幕大小和密度对照表 :



下面是在manifest中设置app在不同分辨率时,是否支持多密度的方法。

<manifest xmlns:android="http://schemas.android.com/apk/res/android">

...

<supports-screens

android:smallScreens="true"

android:normalScreens="true"

android:largeScreens="true"

android:xlargeScreens="true"

android:anyDensity="true" />

</manifest>



转换:

dip和px之间的转换很简单,下面是dip和px的工具类。

/**

 * 密度常量设置,提供dip转换为px的方法

 * 

 * @author zuolongsnail

 * 

 */

public final class DensityConst {

    /** 默认密度 */

    public static float density = 1.0f;

    /** 默认每英寸像素数 */

    public static int densityDpi = 160;

    /**

     * 初始化与密度相关的所有变量值

     * 

     * @param activity

     */

    public static void initDensity(Activity activity) {

        DisplayMetrics dm = new DisplayMetrics();

        activity.getWindowManager().getDefaultDisplay().getMetrics(dm);

        density = dm.density;

        densityDpi = dm.densityDpi;

    }

    /**

     * dip转化为像素

     * 

     * @param dip

     * @return

     */

    public static int getPx(int dip) {

        return (int) (dip * density);

        // return (int)(dip*(densityDpi/160));

    }

    /**

     * 像素转化为dip

     * 

     * @param px

     * @return

     */

    public static int getDip(int px) {

        return (int) (px / density);

        // return (int)((px*160)/densityDpi);

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  value