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

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

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


当前回答

从DP到像素

在dimensions .xml中创建一个值

<dimen name="textSize">20dp</dimen>

以像素为单位获取该值:

int sizeInPixel = context.getResources().getDimensionPixelSize(R.dimen.textSize);

其他回答

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

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

为了更好地解释这个,

getDimension(int resourceId) 

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

getDimensionPixelSize(int resourceId)

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

参见Android参考

根据Android开发指南:

px = dp * (dpi / 160)

但通常当你收到以像素表示的设计时,你会希望以另一种方式执行这个操作。所以:

dp = px / (dpi / 160)

如果你在一个240dpi的设备上,这个比例是1.5(如前所述),所以这意味着一个60px的图标在应用程序中等于40dp。

Xamarin的。安卓

float DpToPixel(float dp)
{
    var resources = Context.Resources;
    var metrics = resources.DisplayMetrics;
    return dp * ((float)metrics.DensityDpi / (int)DisplayMetricsDensity.Default);
}

当你在制作一个自定义渲染器时,使它是非静态的是必要的

从DP到像素

在dimensions .xml中创建一个值

<dimen name="textSize">20dp</dimen>

以像素为单位获取该值:

int sizeInPixel = context.getResources().getDimensionPixelSize(R.dimen.textSize);
/**
 * This method converts dp unit to equivalent pixels, depending on device density. 
 * 
 * @param dp A value in dp (density independent pixels) unit. Which we need to convert into pixels
 * @param context Context to get resources and device specific display metrics
 * @return A float value to represent px equivalent to dp depending on device density
 */
public static float convertDpToPixel(float dp, Context context){
    return dp * ((float) context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT);
}

/**
 * This method converts device specific pixels to density independent pixels.
 * 
 * @param px A value in px (pixels) unit. Which we need to convert into db
 * @param context Context to get resources and device specific display metrics
 * @return A float value to represent dp equivalent to px value
 */
public static float convertPixelsToDp(float px, Context context){
    return px / ((float) context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT);
}