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

Android屏幕相关知识(一)

2016-06-28 23:54 351 查看

1.Android手机屏幕的分辨率和尺寸大小不一,千奇百怪,这在我们自定义view以及做屏幕适配的时候造成了一定的困难,要想高效的解决遇到的问题,需要我们毒地手机屏幕有一定的认识。

2.屏幕参数

1.屏幕大小:

指的是屏幕对角线的长度,用“寸”来表示,比如我们所说的4.7寸,5.5寸的手机。

2.分辨率:

指的是手机屏幕的像素点个数,例如720x1080就是指的屏幕的分辨率,指的是宽有720个像素点,高有1080个像素点。

3.PPI

每英寸像素(Pixels Per Inch),也叫作DPI(Dots Per Inch).它是有对角线的像素点个数除以屏幕的大小得到的。

3.系统屏幕密度

每个厂商的Android手机具有不同的大小尺寸和像素密度的屏幕。Android系统如果要精确到每种DPI的屏幕,那基本上是不可能的,所以系统定义了几个标准的DPI值,作为手机的固定DPI.如下所示:



4. 独立像素密度dp

正是各种屏幕的密度不同,导致同样大小的长度,在不同密度的屏幕上显示的长度不同,因为相同长度的屏幕,高密度的屏幕包含有更多的像素点。Android系统使用mdpi即密度值为160的屏幕作为标准。在这时候1px = 1dp。其他屏幕则要通过比例换算。例如同样是100dp的长度,在mdpi中为100px,而在hdpi中为150px。所以我们也可以得出各个密度值的换算公式。

在mdpi中1dp = 1px,

在hdpi中1dp = 1.5px,

在xhdpi中1dp = 2px,

在xxhdpi中1dp = 3px。

5.px与sp,dip之间单位的转换

/**
* 将px值转化成dip值,保证尺寸大小不变
* @param context
* @param pxValues  px值
* @return
*/
public static int px2dip(Context context, float pxValues) {
// 获取当前屏幕显示的密度值
float density = context.getResources().getDisplayMetrics().density;
return (int) (pxValues / density + 0.5f);   // 加0.5f四舍五入

}

/**
* 将dip值转化成px值,保证尺寸大小不变
* @param context
* @param dipValues dip值
* @return
*/
public static int dip2px(Context context, float dipValues) {
// 获取当前屏幕显示的密度值
float density = context.getResources().getDisplayMetrics().density;
return (int) (dipValues *  density + 0.5f);   // 加0.5f四舍五入

}

/**
* 将px值转换为sp值,保证文字大小不变
* @param context
* @param pxValues
* @return
*/
public static int px2sp(Context context, float pxValues) {
// 获取当前字体显示的密度值
float fontDensity = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValues /  fontDensity + 0.5f);   // 加0.5f四舍五入

}

/**
* 将sp值转换为px值,保证文字大小不变
* @param context
* @param spValues
* @return
*/
public static int sp2px(Context context, float spValues) {
// 获取当前字体显示的密度值
float fontDensity = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValues *  fontDensity + 0.5f);   // 加0.5f四舍五入

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