如何在Android中设置dp大小的边距

时间:2016-10-18 08:44:03

标签: android

我想通过以编程方式为视图设置保证金,我应为margin_top设置 50dp ,我使用此代码

ViewGroup.MarginLayoutParams marginParams = new ViewGroup.MarginLayoutParams(searchView.getLayoutParams());
                    marginParams.setMargins(0, 75, 0, 0);
                    CoordinatorLayout.LayoutParams layoutParams = new CoordinatorLayout.LayoutParams(marginParams);
                    searchView.setLayoutParams(layoutParams);

但在此代码集中50px!如何设置 50dp ,而不是px?!

6 个答案:

答案 0 :(得分:4)

你必须转换它:

final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);

答案 1 :(得分:1)

对于dimens.xml:

context.getResources().getDimensionPixelSize(R.dimen.view_height);

对于编码值:

int height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50,
               getContext().getResources().getDisplayMetrics()); 

答案 2 :(得分:0)

使用此代码:

 /**
 * Convert dp to pixel
 *
 * @param dp
 * @return px
 */
public static int dpToPx(final float dp) {
    return Math.round(dp * (Resources.getSystem().getDisplayMetrics().xdpi / DisplayMetrics.DENSITY_DEFAULT));
}

答案 3 :(得分:0)

private int dp2px(int dp) {
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,getResources().getDisplayMetrics());

转换它!

答案 4 :(得分:0)

public static int dp(int px) {
    return (int) (px * Resources.getSystem().getDisplayMetrics().density);
}
int margin = dp(50);

答案 5 :(得分:0)

这是科特林解决方案

您可以使用以下功能:

fun dpToPx(context: Context, dp: Float): Int {
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.resources.displayMetrics).roundToInt()
}

您可以选择利用扩展功能:

// Use: 16f.dpToPx(context)
internal fun Float.dpToPx(context: Context): Int {
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, this, context.resources.displayMetrics).roundToInt()
}

或者,如果使用调暗资源,请使用以下内容:

context.resources.getDimensionPixelSize(R.dimen.some_dimen_id)