在布局中用XML设置控件的大小,对于屏幕设配就不够灵活。所有在很多情况我们先获取屏幕的长宽然后再去设置控件的宽高,和上下边距。
//设置左右边距动态添加到Group控件中
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
layoutParams.leftMargin = 5;
layoutParams.rightMargin = 5;
group.addView(imageView, layoutParams);
//设置iv_move的宽(高同理)
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) iv_move.getLayoutParams();
layoutParams.width = move_width;
iv_move.setLayoutParams(layoutParams);
//设置View的宽高,让后设置View上边距
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,
ScreenUtil.dip2px(context, 230));
//上边距
params.topMargin = mTeHeight;
cityView.findViewById(R.id.temp_layout_center).setLayoutParams(params);
dip 和px的转换工具类
px: 不同的设备不同的显示屏显示效果是相同的,这是绝对像素,是多少就永远是多少不会改变。
dp也是dip: 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用此单位。 这里要特别注意dip与屏幕密度有关,而屏幕密度又与具体的硬件有关,硬件设置不正确,有可能导致dip不能正常显示。
import android.content.Context;
/**
* 屏幕尺寸, 像素 ,
* @author Administrator
*
*/
public final class ScreenUtil {
/**
* dp 转 px
* @param context
* @param dipValue
* @return
*/
public static int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
/**
* px 转 dp
* @param context
* @param pxValue
* @return
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
/**
* px 转 sp
*
* @param pxValue
* @return
*/
public static int px2sp(Context context, float pxValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}
/**
* sp 转 px
*
* @param spValue
* @return
*/
public static int sp2px(Context context, float spValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
}