我已经为分辨率为480x800的Pantech设备创建了以像素为单位的高度和宽度的应用程序。

我需要转换G1设备的高度和宽度。 我认为将其转换为dp将解决问题,并为两个设备提供相同的解决方案。

有没有什么简单的方法将像素转换为dp? 有什么建议吗?


当前回答

float density = context.getResources().getDisplayMetrics().density;
float px = someDpValue * density;
float dp = somePxValue / density;

密度=

.75在ldpi (120 dpi) 1.0对mdpi (160 dpi;基线) 1.5在hdpi (240 dpi) 2.0 on xhdpi (320 dpi) 3.0 on xxhdpi (480 dpi) 4.0在xxxhdpi (640 dpi)

使用这个在线转换器来处理dpi值。

编辑: dpi桶与密度之间似乎不是1:1的关系。看起来Nexus 5X是xxhdpi的密度值是2.625(而不是3)。你可以在设备指标中自己查看。

其他回答

Java代码:

// Converts 14 dip into its equivalent px
float dip = 14f;
Resources r = getResources();
float px = TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP,
    dip,
    r.getDisplayMetrics()
);

芬兰湾的科特林代码:

 val dip = 14f
 val r: Resources = resources
 val px = TypedValue.applyDimension(
     TypedValue.COMPLEX_UNIT_DIP,
     dip,
     r.displayMetrics
 )

芬兰湾的科特林扩展:

val Number.toPx get() = TypedValue.applyDimension(
  TypedValue.COMPLEX_UNIT_DIP,
  this.toFloat(),
  Resources.getSystem().displayMetrics)

这应该会给你dp到像素的转换:

public static int dpToPx(int dp)
{
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

这应该会给你dp的转换像素:

public static int pxToDp(int px)
{
    return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}

最好放在Util.java类中

public static float dpFromPx(final Context context, final float px) {
    return px / context.getResources().getDisplayMetrics().density;
}

public static float pxFromDp(final Context context, final float dp) {
    return dp * context.getResources().getDisplayMetrics().density;
}
private fun toDP(context: Context,value: Int): Int {
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
        value.toFloat(),context.resources.displayMetrics).toInt()
}

如果在values/dimen中有维度,可能最好的方法是直接从getDimension()方法获取维度,它将返回已经转换为像素值的维度。

context.getResources().getDimension(R.dimen.my_dimension)

为了更好地解释这个,

getDimension(int resourceId) 

将返回已转换为像素AS FLOAT的维度。

getDimensionPixelSize(int resourceId)

将返回相同的,但截断为int,所以AS AN 整数。

参见Android参考