setWidth(int pixels)是使用dip还是px?

时间:2010-03-09 03:29:09

标签: android width pixels units-of-measurement density-independent-pixel

设置宽度(以像素为单位)是否使用设备无关像素或物理像素作为单位? 例如,设置Width(100)是否将视图的宽度设置为100 dips或100 pxs?

感谢。

7 个答案:

答案 0 :(得分:212)

它使用像素,但我确定你想知道如何使用dips。答案在TypedValue.applyDimension()。以下是如何在代码中将dips转换为px的示例:

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

答案 1 :(得分:24)

在代码中获取恒定数量的DIP的正确方法是创建一个包含dp值的资源XML文件,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="image_width">100dp</dimen>
    <dimen name="image_height">75dp</dimen>
</resources>

然后在代码中引用资源,如下所示:

float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));

您返回的浮点数将根据设备的像素密度进行相应缩放,因此您无需在整个应用程序中继续复制转换方法。

答案 2 :(得分:6)

方法setWidth(100),将100像素设置为宽度(不是在dp中)。因此,您可能会在不同的Android手机上遇到宽度变化问题。所以在dp而不是像素中使用测量。使用以下代码在dp中获取测量值样本宽度= 300px,高度= 400px。

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());

int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());

答案 3 :(得分:4)

float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;

Source (@Romain Guy)

答案 4 :(得分:0)

像素当然,该方法要求将像素作为参数。

答案 5 :(得分:0)

基于上述对我来说很有效的答案,我生成了一些 helper方法,只需将它们添加到您的utils中即可在整个项目中使用它们。

   // value in DP
   public static int getValueInDP(Context context, int value){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
    }

    public static float getValueInDP(Context context, float value){
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
    }

    // value in PX
    public static int getValueInPixel(Context context, int value){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
    }

    public static float getValueInPixel(Context context, float value){
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
    }

答案 6 :(得分:0)

Kotlin 扩展函数将像素转换为 dp

fun Context.pxToDp(value: Float):Int{
    val r: Resources = resources
    return TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_DIP, value, r.displayMetrics
    ).roundToInt()
}