我想通过以编程方式为视图设置保证金,我应为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?!
答案 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)