现在主流屏幕:1280*720; 测试屏幕(480*800,1920*1080)
如何适配:
遵循原则: 不用AbsoluteLayout(绝对布局), 多用相对布局和线性布局(权重), 用dp,不用px
1)图片适配(不是很常用)
drawable文件夹有ldpi、mdpi、hdpi、xhdpi、xxhdpi等。dpi指像素/英寸,而ldpi指120,mdpi指160,hdpi指240,xhdpi指320,xxhdpi指480(3:4:6:8:12);程序自动选择:平方相加,开放,除以屏幕尺寸;
缺点:图片对,akp大
后续版本:一组图,系统自动拉伸
2)布局适配(不是很常用)
layout 、 layout-800x480
3)尺寸适配
dp和px的关系: dp = px/设备密度
float density = getResources().getDisplayMetrics().density;//设备密度
System.out.println("设备密度:" + density);
320*240(0.75), 480*320(1),480*800(1.5),1280*720(2)
values->dimens.xml values-1280x720
DisplayMetrics displaymetrics = new DisplayMetrics();
((WindowManager) BaseApplication.getContext().getSystemService(
Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(
displaymetrics);
float density = displaymetrics.density;// 3.0 1.0
int densityDpi = displaymetrics.densityDpi;// 480 160
int heightPixels = displaymetrics.heightPixels;// 1920 752
int widthPixels = displaymetrics.widthPixels;// 1080 480
float dimension = getResources().getDimension(R.dimen.dp_60);
手机怎么去选着
values-w360dp:
如果:displaymetrics.widthPixels=1080 px;displaymetrics.density=3
dp = px/设备密度 =>360dp
layout下: @dimen/sss
values、values-1280x720 下的dimens :<dimen nam="">2dp</>
/**
* dp转px
*/
public static int dp2px(Context ctx, float dp)
{
float density = ctx.getResources().getDisplayMetrics().density;
int px = (int) (dp * density + 0.5f);// 4.9->5 4.4->4
return px;
}
/**
* px转dp
*/
public static float px2dp(Context ctx, int px)
{
float density = ctx.getResources().getDisplayMetrics().density;
float dp = px / density;
return dp;
}
4)权重适配
线性布局中:android:layout_weight="1";//子 android:weightSum="3"//父
5)代码适配
获取屏幕宽高,动态计算控件大小;LayoutParams
int w = getWindowManager().getDefaultDisplay().getWidth();
int h = getWindowManager().getDefaultDisplay().getHeight();
LinearLayout.LayoutParams lpLayoutParams= new LinearLayout.LayoutParams(w/3,h*2);
tv.setLayoutParams(lpLayoutParams);