『壹』 android 屏幕适配ui设置px怎么转换成dp
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
『贰』 图解android开发中dp和px的区别
dp也就是dip。这个和sp基本类似。如果设置表示长度、高度等属性时可以使用dp或sp。但如果设置字体,需要使用sp。dp是与密度无关,sp除了与密度无关外,还与scale无关。如果屏幕密度为160,这时dp和sp和px是一样的。1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。那么原来TextView的宽度设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但如果设置成160dp或160sp的话。系统会自动将width属性值设置成320px的。也就是160 * 320 / 160。其中320 / 160可称为密度比例因子。也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换.
『叁』 android px/2是dp吗
/**
* dp2px
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* px2dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
/**
*根据设备信息获取当前分辨率下指定单位对应的像素大小;
* px,dip,sp -> px
*/
public float getRawSize(Context c, int unit, float size) {
Resources r;
if (c == null){
r = Resources.getSystem();
}else{
r = c.getResources();
}
return TypedValue.applyDimension(unit, size, r.getDisplayMetrics());
}
『肆』 android控件的高度和宽带的单位sp px dp之间是怎样转换的
public static float dp2Px(Activity mContext, float dps) { DisplayMetrics metrics = new DisplayMetrics(); float density = metrics.density; Log.i("dp2Pix", "" + density); mContext.getWindowManager().getDefaultDisplay().getMetrics(metrics); density = metrics.density; Log.i("dp2Pix", "" + density); float pixels = dps * density; return pixels; }你可以看看DisplayMetrics 的api的使用,网上好多人写的什么/** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f);}简直狗屁不通,我在机器上测试了,14dp在480*800的机器上面前面的方法是得到的是21,后面一个方法的得到的是14,你们自己觉得那个正确呢,你们也可以自己测试下,看是否正确 查看原帖>>
『伍』 dp和px之间的换算公式
在Android开发中,尺寸换算可以说既简单又复杂,而且还比较碎,特别是屏幕适配的时候肯定会用到他们。今天就来总结一下他们三者的关系,首先说下他们都是什么。
px:像素单位。最基础的图像构成元素单位
dp:与密度无关的像素,这是一个基于屏幕物理密度的抽象单位。
这里要解释一下密度的概念,密度(dpi):每英寸包含的像素个数(单位是dpi),1dp实际上相当于密度为160dpi的屏上的一个点。可否理解为物理尺寸?也就是说,如果屏幕物理密度是160dpi时,dp和px是等效的。
换算公式 1: px = dp * (dpi / 160)
sp:同dp相似,但还会根据用户的字体大小偏好来缩放(建议使用sp作为文本的单位,其它用dip)
咱们废话不多说,直接上表格,通过这个表格你会非常快速的定位到你要找的内容。
宽×高(标准值) 240×320 320×480 480x800 720x1280 1080x1920 1440×2560
DPI等级 LDPI MDPI HDPI XHDPI XXHDPI XXXHDPI
DPI数值 (density) 120 160 240 320 480 640
对应比例 3 4 6 8 12 16
1DP=?PX 0.75 1 1.5 2 3 4
注:density值表示每英寸有多少个显示点,与分辨率是两个概念。
MDPI为baseline,其他均以此为基准,在此设备上,1dp = 1px
下面附上开发中用到的dp和px相互转换的工具类。sp和dp在开发中是同等对待的,只是sp是用来对文字的大小的。其他的全用dp就好。
import android.content.Context;
public class DensityUtil {
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
这个工具类在网上一大推,而且基本都一样,加0.5f是有个偏移值,确保精度不流失。scale是在这个类DisplayMetrics中定义的全局变量,其实这个值就是当前手机的density/160
『陆』 Android中dp和px之间如何进行转换
1、px :是屏幕的像素点
2、dp :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1pxdip
3、转换方式如下
public class DensityUtil {
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
『柒』 android 将dp转换px时后面为什么加 0.5f
要四舍五入
『捌』 Android的px,dp和sp等单位的区别详解
px:
即像素,1px代表屏幕上一个物理的像素点;
px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同
dp:
这个是最常用但也最难理解的尺寸单位。它与“像素密度”密切相关,所以首先我们解释一下什么是像素密度。假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),160dpi就是这部手机的像素密度,像素密度的单位dpi是Dots Per Inch的缩写,即每英寸像素数量。横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。
不同的手机/平板可能具有不同的像素密度,例如同为4寸手机,有480x320分辨率的也有800x480分辨率的,前者的像素密度就比较低。
Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它们对应的dp到px的系数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。
例如界面上有一个长度为“100dp”的图片,那么它在240dpi的手机上实际显示为80x1.5=120px,在320dpi的手机上实际显示为80x2=160px。如果你拿这两部手机放在一起对比,会发现这个图片的物理尺寸“差不多”,这就是使用dp作为单位的效果。
dip:
与dp完全相同,只是名字不同而已。在早期的Android版本里多使用dip,后来为了与sp统一就建议使用dp这个名字了。
sp:
与缩放无关的抽象像素(Scale-independent Pixel)。sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。
还有几个比较少用到的尺寸单位:
mm:
即毫米;
in:
即英寸,1英寸=2.54厘米(约);
pt:
1pt=1/72英寸=0.035厘米;
最佳实践,文字的尺寸一律用sp单位,非文字的尺寸一律使用dp单位。例如textSize="16sp"、layout_width="60dp";偶尔需要使用px单位,例如需要在屏幕上画一条细的分隔线时:
<View layout_width="match_parent" layout_height="1px"/>
补充:
1. android.view.ViewGroup.LayoutParams.height及width这两个属性的单位为像素,但是为了兼容多种分辨率的手机,我们需要最好使用dp。
2. 根据手机的分辨率从dp的单位转成px
public static int dip2px(Context context, float dpValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dpValue*scale + 0.5f);
}
3.根据手机的分辨率从px转成dp
public static int px2dip(Context context, float pxValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(pxValue/scale + 0.5f);
}
『玖』 android安卓系统dp/sp/px换算表比率 ratexxxhdpi是多少
首先要明确两点,什么是dpi?什么是dp?
dpi = dots per inch(每个inch上有多少个点)
160dpi的屏幕,1dp = 1px,也就意味着1dp = 1/160 inch。
所以每内个inch上的点容数越多(点的密度越大),每个dp对应的px也就越大
dp/sp可以认为是相同的,不过sp通常用于设置字体大小,而dp用于尺寸。
dp/sp与px换算,是和设备的density相关的,dp * density (密度)= px。
float density = Resources.getSystem().getDisplayMetrics().density;
所谓的xhdpi,其dpi并不是某一固定取值,只要在240~320dpi范围内的都认为是xhdpi(mdpi/hdpi/xhdpi/xxhdpi类似)。
所以同样是xhdpi的手机,dp和px的转换也是不同的。
『拾』 安卓系统中dp,px,pt,sp 的区别 以及dp 和 px 互转
dip: device independent pixels(设备独立像素). 一般我们为了支持多种分辨率如WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。内
dp: dip是一样的,谷歌官方容推荐使用这个
px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较少。
pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。