LayoutParams 의 높이 / 너비 를 밀도 독립 픽셀 (dp) 로 설정하는 방법이 있습니까? 프로그래밍 방식으로 설정하면 높이 / 너비가 dp가 아닌 픽셀 단위 인 것처럼 보입니다.
LayoutParams 의 높이 / 너비 를 밀도 독립 픽셀 (dp) 로 설정하는 방법이 있습니까? 프로그래밍 방식으로 설정하면 높이 / 너비가 dp가 아닌 픽셀 단위 인 것처럼 보입니다.
답변:
딥 값을 픽셀로 변환해야합니다.
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, <HEIGHT>, getResources().getDisplayMetrics());
나를 위해 이것은 트릭입니다.
public static int getDPI(int size, DisplayMetrics metrics){
return (size * metrics.densityDpi) / DisplayMetrics.DENSITY_DEFAULT;
}
다음과 같이 함수를 호출하십시오.
DisplayMetrics metrics;
metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int heigh = getDPI(height or width, metrics);
여러 번 사용할 수 있기 때문에 :
public static int convDpToPx(Context context, float dp) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
}
일반적으로 하나 이상의 값을 변환해야하므로 변환율을 사용하는 것이 더 실용적이라는 것을 알았습니다. 전환율이 변하지 않기 때문에 약간의 처리 시간이 절약됩니다.
/**
* Get conversion rate from dp into px.<br>
* E.g. to convert 100dp: px = (int) (100 * convRate);
* @param context e.g. activity
* @return conversion rate
*/
public static float convRateDpToPx(Context context) {
return context.getResources().getDisplayMetrics().densityDpi / 160f;
}
대답 된 솔루션이 저에게 효과가 없었고보기의 높이가 여전히 꺼져있었습니다. 나는 이것으로 끝났고 잘 작동합니다.
protected int dp2px(int dp){
final float scale = getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
그리고 반대로 원하면 픽셀을 dp로 ...
protected float px2dp(float px){
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float dp = px / (metrics.densityDpi / 160f);
return Math.round(dp);
}