您的位置:首页 > 移动开发 > Android开发

android随笔19——手机屏幕适配

2016-01-09 21:53 302 查看
手机屏幕适配



让应用在不同分辨率下的手机有较好的显示效果。



1. 图片适配: 根据手机的像素密度,选择不同drawable文件夹下的图片

2. dimens 尺寸 适配:根据手机的像素密度,选择不同values文件夹下的dimens

3. 布局适配:根据手机的像素密度,选择不同layout文件夹下的布局

4. 代码适配:通过代码动态指定控件大小,达到适配效果

5. 权重适配:layout_weight:巧妙利用权重进行适配(将屏幕宽高 等分)



像素密度: 单位尺寸内的像素大小 dpi (dip,dp)



红米 note 1280x720 5.5寸



像素密度:对角线的像素的多少/尺寸



1638400 + 518400 = 1468 (对角线的像素的多少)



1468/5.5 = 267 dpi





xxdpi 与 像素密度dpi 关系

ldpi ~120dpi

mdpi ~16odpi

drawable/values(默认资源)

hdpi ~240dpi

xhdpi ~320dpi

xxhdpi ~480dpi

xxxhdpi ~640dpi





1. 图片适配: 根据手机的像素密度,选择不同drawable文件夹下的图片



默认情况下,会根据手机像素密度,加载对应drawable文件夹下的图片 (手机mdpi--drawable-mdpi)



在布局中使用同名文件图片,在不同的drawable下放入不同大小的a.jpg (a:不同大小的相同的图片)



如果对应drawable文件夹下没有当前图片,会向上查找:mdpi没有,hdpi——xhdpi——————



如果向上找,找不到对应的图片,才会向下查找。



drawable 是 大于mdpi 小于hdpi



在工作中,美工会给多套图片,放入对应的drawable文件夹下即可





2. dimens 尺寸 适配:根据手机的像素密度,选择不同values文件夹下的dimens



ldpi 1dp = 0.75px

mdpi 1dp = 1px

hdpi 1dp = 1.5px

xhdpi 1dp = 2.0px



hdpi 宽度 480px , 一半 240px



160dp * 1.5 = 240 px



xhdpi 宽度 800px 一半 400 px = 200dp



160dp *2 = 320px



使用dimens规则:



将布局中的dp抽取出来,放到dimens里即可。布局中通过@dimen/xxx调用



dp有一定的适配能力



在工作中,还是使用dp,如果测试时发现不视频的机型,针对某种机型,做dimens适配。

3. 布局适配:根据手机的像素密度,选择不同layout文件夹下的布局



谷歌推荐做法,当时公司不采用。layout布局编写非常麻烦,工作量大



layout-xhdpi 241-320dpi



layout-1280x720 : 某一个精确分辨率的手机适配

values-sw600dp : 手机最小边框长度,如果大于等于600dp ,就会选择此文件夹下的资源



4. 代码适配:通过代码动态指定控件大小,达到适配效果 (不要出现具体的px值)



1. 根据手机屏幕来设置控件大小



TextView textView = (TextView) findViewById(R.id.textview);

//获取屏幕宽度

int screenWidth = getResources().getDisplayMetrics().widthPixels;//屏幕宽度:px

int textViewWidth = (int) (screenWidth*0.8);

LayoutParams params = new LayoutParams(textViewWidth , LayoutParams.WRAP_CONTENT);

textView.setLayoutParams(params);



2. dp-px (工具)



/**

* 若代码中出现了具体的数字,其单位是px 需要根据手机的分辨率从 dip
* 的单位 转成为 px(像素)

*/

public static int dip2px(Context context, float dpValue) {

final float scale = context.getResources().getDisplayMetrics().density; //屏幕的密度dpi

return (int) (dpValue * scale + 0.5f);

}

5. 权重适配:layout_weight:巧妙利用权重进行适配(将屏幕宽高 等分)



1. 屏幕平分

2. 将剩余控件分配给其中一个控件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: