Android屏幕适配

首先,Android屏幕适配有6种适配方法,分别是:
1.图片适配  
2.权重适配
3.layout适配
4.JAVA代码
5.dimens适配
6.百分比适配

核心概念与单位详解:  
1. 什么是屏幕尺寸、屏幕分辨率、屏幕像素密度?
屏幕尺寸是指屏幕对角线的长度。单位是英寸,1英寸=2.54厘米
屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1像素点,一般是纵向像素横向像素,如1920x1080
屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写,像素密度和屏幕尺寸和屏幕分辨率有关
屏幕密度:
   
 
屏幕像素密度计算公式

例如:计算Nexus5的屏幕像素密度:
屏幕尺寸:4.95inch、分辨率:1920×1080,屏幕像素密度:445

和官方给出的一样,说明我们计算正确。

2. 什么是dp、dip、dpi、sp、px?之间的关系是什么?
dip:Density Independent Pixels(密度无关像素)的缩写。以160dpi为基准,1dp=1px
dp:同dip
dpi:屏幕像素密度的单位,“dot per inch”的缩写
px:像素,物理上的绝对单位
sp:Scale-Independent Pixels的缩写,可以根据文字大小首选项自动进行缩放。Google推荐我们使用12sp以上的大小,通常可以使用12sp,14sp,18sp,22sp,最好不要使用奇数和小数。
dip和具体像素值的对应公式是dip/pixel=dpi值/160,也就是px = dp * (dpi / 160) 
具体使用方法:
一、图片适配
图片适配就是需要根据dpi值准备5套图片资源,分别放入相应的包下,Android有个自动匹配机制去选择对应的图片资源,系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。  

在Google官方开发文档中,说明了 mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi=2:3:4:6:8 的尺寸比例进行缩放。例如,一个图标的大小为48×48dp,表示在mdpi上,实际大小为48×48px,在hdpi像素密度上,实际尺寸为mdpi上的1.5倍,即72×72px,以此类推。
名称    像素密度范围    图片大小
mdpi         120dp~160dp    48×48px
hdpi          160dp~240dp    72×72px   
hdpi          1dp=1.5px         480*800      240dpi
xhdpi        240dp~320dp    96×96px
xhdpi        1dp=2px            720*1280    320dpi  
xxhdpi      320dp~480dp    144×144px
xxhdpi      1dp=3px            1080*1920    480dpi
xxxhdpi    480dp~640dp    192×192px
ldpi          1dp=0.75px         240*320      120dpi
mdpi        1dp=1px             320*480       160dpi


二、权重适配
该属性的作用是决定控件在其父布局中的显示权重,一般用于线性布局中。其值越小,则对应的layout_width layout_height的优先级就越高,一般横向布局中,决定的是layout_width的优先级;纵向布局中,决定的是layout_height的优先级。
传统的layout_weight使用方法是将当前控件的layout_width和layout_height都设置成match_parent,这样就可以把控件的显示比例完全交给layout_weight;这样使用的话,就出现了layout_weight越小,显示比例越大的情况。不过对于2个控件还好,如果控件过多,且显示比例也不相同的时候,控制起来就比较麻烦了,毕竟反比不是那么好确定的。 
于是就有了现在最为流行的0px设值法。看似让人难以理解的layout_height=0px的写法,结合layout_weight,却可以使控件成正比例显示,轻松解决了当前Android开发最为头疼的碎片化问题之一。
具体就由代码中去实现,来查看效果
三、Layout适配
layout适配就是创建多个layout文件,根据需要适配的设备的分辨率来写XML文件,在这里设置XML文件的时候尽量不要使用具体的数据来控制控件的大小,一般都是使用warp_content和match_parent。
四、JAVA代码适配
主要方法就是Display Metrics
Android 可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局变形问题。
手机的分辨率信息是手机的一项重要信息,很好的是,Android 已经提供DisplayMetircs 类可以很方便的获取分辨率。下面简要介绍 DisplayMetics 类:
Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体。
为了获取DisplayMetrics 成员,首先初始化一个对象如下:
DisplayMetrics display= new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(display);//将当前窗口的一些信息放在DisplayMetrics类中,
注:构造函数DisplayMetrics 不需要传递任何参数;getDefaultDisplay() 方法将取得的宽高维度存放于DisplayMetrics 对象中,
而取得的宽高维度是以像素为单位(Pixel) ,“像素”所指的是“绝对像素”而非“相对像素”。

五、Dismens适配
使用步骤:0.创建对应的values-分辨率的值,目录.
1.在对应目录下复制一份dimens.xml文件,
2.在文件下创建dimen条目,设置自定义条目名,dp属性
3.在要用到dp的控件引用dimen条目即可:格式->@dimen/XXX
系统会根据文件后面的分辨率,自动加载对应的values文件,注意:前面是大数,中间的"x"是小x
六、百分比适配
       Android百分比适配解决方案

       百分比屏幕适配方案的原理:布局文件首先确定一个参考的屏幕分辨率,例如:720x1280,然后其他屏幕分辨率的设备计算每个控件在参考分辨率设备上占据的百分比,百分比包括控件的长、宽、margin距离、padding距离,根据分辨率计算在当前设备所占的比例,最后自动选择values文件夹下最接近当前分辨率dimen值   

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值