Android屏幕适配
2016-06-26 13:52
507 查看
基本概念
1 屏幕的大小 : 屏幕的对角线的英寸数值。2 分辨率:eg:480*800,1280*720. 表示物理屏幕区域内像素点的总和.
因为我既可以把1280*720的分辨率做到4.0的手机上面。我也可以把1280*720的分辨率做到5.0英寸的手机上面.
如果分辨率相同。手机屏幕越小清晰:
3 dpi : 密度 (每一个英寸物理屏幕区域内的像素点)
也就是:对角线上面一个英寸分布的像素点数量,勾股定理可求得
以1280x720的分辨率,5英寸手机为例,求dpi:
Math.sqrt(1280*1280+720*720)/5 = 293.73dpi
dpi和ppi一样
多套图适配:多少个分辨率切多少套图片,导致应用程序很大,
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*1080
dimens.xml适配:
dp不能适配,所以在不同分辨率的手机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
布局适配
不同分辨率的手机,加载不同文件夹下的的布局文件
java代码适配
给当前的控件设置宽高为,屏幕宽高的百分比屏幕宽高,控件宽高为屏幕宽高的各0.5,设置在当前控件的父布局,然后作用在子控件上
//存储屏幕相关信息的对象
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控件都是没有宽高的,只有布局有宽高,控件的宽高都是布局给的,没有了布局,单说控件的宽高没有意义。
权重适配
剩余控件的分配规则,线性布局上才有权重,width = 0dp,height = 0dp,由权重决定控件在线性布局中的比重相关文章推荐
- Android-屏幕适配需要注意的地方总结
- Android dpi,dip,dp的概念以及屏幕适配
- ios8新特性屏幕适配之sizeclass
- iOS屏幕旋转学习笔记
- iOS屏幕适配
- Massary屏幕适配,自动布局
- iOS布局和屏幕适配
- 屏幕适配
- Cocos2d-x 多分辨率适配完全解析
- android屏幕适配
- Cocos2dx游戏屏幕适配
- 分享我的百度网盘 iPhone6适配教程、自动布局教程 (视频)
- cocos2d-x 屏幕适配
- Android屏幕自适应解决办法
- Android----实现屏幕自适应
- 适配的时候根据屏幕尺寸判断机型
- Android屏幕适配之路
- android手机屏幕密度的计算及dp、px、sp单位的转换,屏幕适配相关
- Android 手机关于屏幕适配