android屏幕适配

来源:互联网 发布:应力张量不变量 知乎 编辑:程序博客网 时间:2024/05/29 07:47

现在主流屏幕: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.0int densityDpi = displaymetrics.densityDpi;// 480 160int heightPixels = displaymetrics.heightPixels;// 1920 752int widthPixels = displaymetrics.widthPixels;// 1080 480float 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->4return 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);



1 0
原创粉丝点击