本文共 2043 字,大约阅读时间需要 6 分钟。
多套图适配:多少个分辨率切多少套图片,导致应用程序很大,
800*480 1280*720 1920*1080一套图适配:(一般做800*480的,小图不管,拉伸不明显,大图按照各个分辨率去另做图)
不同像素密度的手机,加载不同drawable文件夹下图片,如果当前手机对应像素密度下没有图片,找高分辨率的文件夹
像素密度dpi与drawable目录有如下对应关系:
一般情况下每种分辨率所搭载的手机尺寸是有范围的,(虽然理论上分辨率和手机尺寸可以随意搭配,例如山寨机把小的分辨率搭配过大的手机屏幕,严重模糊)
例如800*480 分辨率一般搭载3.7-4.3左右 4寸最常见
所以一般分辨率与dpi的对应关系
ldpi ---320*240
mdp---如果不放图片就去hdpi中加载 hdpi---800*480 xhdpi---1280*720 xxhdpi---1920*1080dp不能适配,所以在不同分辨率的手机valus文件夹下面去设置不同的dp值,放在dimens.xml文件中,不同的分辨率手机会加载对应文件夹下的dimens.xml,如果对应分辨率下的dimens.xml文件中没有某属性的定义,就去默认的dimens.xml文件中寻找(values文件夹下的dimens.xml)所以一定要保证要适配的属性,在默认文件夹下的dimens.xml也存在,以防找不到属性定义报错。
dp与像素的对应关系:
计算之后,对比一般分辨率与dpi的对应关系表,得出结论:dp不适配
ldpi 1dp = 0.75px 160dp = 120px 240px中间
mdpi 1dp = 1px 160dp = 160px 320px中间 hdpi 1dp = 1.5px 160dp = 240px 480px中间 xhdpi 1dp = 2px 160dp = 320px 640px中间 720个像素 xxdpi 1dp = 3px 160dp = 480px 960px中间 1080不同分辨率的手机,加载不同文件夹下的的布局文件
//存储屏幕相关信息的对象 DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); //屏幕宽度上分布的像素点 int width = displayMetrics.widthPixels; int height = displayMetrics.heightPixels; Log.i(tag, "width = "+width); Log.i(tag, "height = "+height); //将对应的宽高设置给其夫控件,然后作用在子控件上 LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( //从数学的角度进行四舍五入 //160*0.5 = 80 //161.2*0.5 = 80.6+0.5= 81.1 (int)(width*0.5+0.5), (int)(height*0.5+0.5)); TextView textView = (TextView) findViewById(R.id.tv); textView.setLayoutParams(layoutParams);为什么一定要先设置给父控件,然后作用在子控件上呢?
因为android控件都是没有宽高的,只有布局有宽高,控件的宽高都是布局给的,没有了布局,单说控件的宽高没有意义。