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

Android屏幕相关知识

2016-02-26 15:42 676 查看

Android屏幕相关知识

屏幕参数

屏幕大小

对角线的长度,比如我们常见的4.7寸/5.5寸。

分辨率

手机屏幕像素点的个数,比如720*1080,就是宽有720个像素点,高有1080个像素点。

PPI/DPI

每英寸像素,我们计算的话就是对角线上的像素点数除以屏幕大小得到的。

手机屏幕密度

在android系统中,系统定义个几个标准的DPI值,用来作为固定的DPI。我们在开发中美工会做不同屏幕密度的图给开发人员,具体对照关系如下:


密度ldpimdpihdpixhdpixxhdpi
密度值120160240320480
分辨率240*320320*480480*800720*12801080*1920

独立像素密度 dp

由于每个厂商的android手机的具有的不同的大小尺寸和不同像素密度的屏幕,屏幕尺寸碎片化严重。导致同样像素大小的长度,在不同的屏幕上显示长度不同。相同长度的屏幕,高密度的屏幕包含更多的像素点。

android系统是哟个mdpi密度值为160的屏幕作为标准,在这个屏幕上1dp=1px。其他屏幕通过比例进行换算,如下:

mdpi1dp=1px
hdpi1dp=1.5px
xhdpi1dp=2px
xxhdpi1dp=3px
由上表可以看出各个分辨率换算比例ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12。

单位换算

而我们在实际开发中考虑到屏幕适配,我们在布局文件中尽量使用与屏幕的物理参数无关的单位如dp和sp,而不用px;在程序中,也可以很方便的对这些单位进行转换,可将下面代码作为工具类保存在项目中。

public class DensityUtil {
/**
* 将dip或dp值转换为px
*
* @param context
* @param dpValue
* @return
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}

/**
* 将px值转换为dip或dp
*
* @param context
* @param pxValue
* @return
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}

/**
* 将px值转换为sp
*
* @param context
* @param pxValue
* @return
*/
public static int px2sp(Context context, float pxValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}

/**
* 将sp值转换为px
*
* @param context
* @param pxValue
* @return
*/
public static int sp2px(Context context, float spValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}

/**
* 获得屏幕物理像素width
*
* @param context
* @return
*/
public static int getScreenWidth(Activity context) {
DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);
return dm.widthPixels;
}

/**
* 获得屏幕物理像素height
*
* @param context
* @return
*/
public static int getScreenHeight(Activity context) {
DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);
return dm.heightPixels;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 手机 dp