psy*_*tik 122 android android-layout
有没有办法将LayoutParams的高度/宽度设置为与密度无关的像素(dp)?看起来像编程时设置的高度/宽度是以像素为单位而不是dp.
Mok*_*kus 270
您需要将您的dip值转换为像素:
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, <HEIGHT>, getResources().getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)
对我来说这就是诀窍.
Had*_*des 12
public static int getDPI(int size, DisplayMetrics metrics){
return (size * metrics.densityDpi) / DisplayMetrics.DENSITY_DEFAULT;
}
Run Code Online (Sandbox Code Playgroud)
像这样调用这个函数,
DisplayMetrics metrics;
metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int heigh = getDPI(height or width, metrics);
Run Code Online (Sandbox Code Playgroud)
因为它可能会被多次使用:
public static int convDpToPx(Context context, float dp) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
}
Run Code Online (Sandbox Code Playgroud)
我发现使用转换率更实际,因为通常需要转换多个值.由于转换率不会改变,因此可节省一些处理时间.
/**
* 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;
}
Run Code Online (Sandbox Code Playgroud)
这是我的片段:
public class DpiUtils {
public static int toPixels(int dp, DisplayMetrics metrics) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
}
}
Run Code Online (Sandbox Code Playgroud)
哪里 DisplayMetrics metrics = getResources().getDisplayMetrics()
| 归档时间: |
|
| 查看次数: |
72200 次 |
| 最近记录: |