今天使用LayoutParams设置LinearLayout大小的时候遇到了这个问题,在xml布局中长和宽都是100dp,想要
改变为80dp,80dp,直接设置时出现了问题,和预期不一样。然后想到了屏幕密度的问题。
LayoutParams params = new LayoutParams(80,80); ll.setLayoutParams(params);
在new LayoutParams(int width,int height)中的width和height都是px,而不是dp.所以我们需要把width和height的值设置为dp转化为px以后的值。
像这样就行了:
LayoutParams params = new LayoutParams(dp2px(80),dp2px(80)); ll.setLayoutParams(params);
这是dp转化为px的方法:
int dp2px(float dp) { final float scale = mContext.getResources().getDisplayMetrics().density; return (int) (dp * scale + 0.5f); }
-
- 这是px转化为dp的方法:
-
public static int px2dp(float px) { final float scale = mContext.getResources().getDisplayMetrics().density; return (int) (px / scale + 0.5f); }
int dp2px(float dp) { final float scale = mContext.getResources().getDisplayMetrics().density; return (int) (dp * scale + 0.5f); }
-
public static int px2dp(float px) { final float scale = mContext.getResources().getDisplayMetrics().density; return (int) (px / scale + 0.5f); }