Android屏幕适配篇
一、Android屏幕适配出现的原因 在我们学习如何进行屏幕适配之前, 我们需要先了解下为什么Android需要进行屏幕适配。 由于Android系统的开放性, 任何用户、 开发者、 OEM厂商、 运营商都可以对Android进行定制, 修改成他们想 要的样子。 这就导致了Android设备出现严重的碎片化, 这种“碎片化”到底到达什么程度呢? 据OpenSignalMaps报告 统计, 2014年, 支持Android的设备共有18796种, 由此可见至Android设备的种类已经达到了几万种!Android手机屏幕 尺寸也出现了多种多样; 屏幕尺寸这么多, 为了让我们开发的程序能够比较美观的显示在不同尺寸、 分辨率、 像素 密度的Android手机上, 所以我们要对Android屏幕进行适配; 二、Android屏幕几个重要概念 首先, 我们先要学习几个重要的概念。 什么是屏幕尺寸、 屏幕分辨率、 屏幕像素密度? 什么是dp、 dip、 dpi、 sp、 px? 他们之间的关系是什么? 什么是mdpi、 hdpi、 xdpi、 xxdpi、 xxxdpi? 如何计算和区分? 屏幕尺寸 屏幕尺寸指屏幕的对角线的长度, 单位是英寸, 1英寸=2.54厘米 比如常见的屏幕尺寸有2.4、 2.8、 3.5、 3.7、 4.2、 5.0、 5.5、 6.0等 屏幕分辨率 屏幕分辨率是指在横纵向上的像素点数, 单位是px, 1px=1个像素点。 一般以纵向像素*横向像素, 如1920*1080。 屏幕像素密度 屏幕像素密度是指每英寸上的像素点数, 单位是dpi, 即“dot per inch”的缩写。 屏幕像素密度与屏幕尺寸和屏幕分辨率有关, 在单一变化条 件下, 屏幕尺寸越小、 分辨率越高, 像素密度越大, 反之越小。 单位dp、 dip、 dpi、 sp、 px px我们应该是比较熟悉的, 前面的分辨率就是用的像素为单位, 大多数情况下, 比如UI设计、 Android原生API都会以px作为统一的计量单 位, 像是获取屏幕宽高等。 dip和dp是一个意思, 都是Density Independent Pixels的缩写, 即密度无关像素, 上面我们说过, dpi是屏幕像素密度, 假如一英寸里面有160 个像素, 这个屏幕的像素密度就是160dpi, 那么在这种情况下, dp和px如何换算呢? 在Android中, 规定以160dpi为基准, 1dip=1px, 如果 密度是320dpi, 则1dip=2px, 以此类推。 假如同样都是画一条320px的线, 在480*800分辨率手机上显示为2/3屏幕宽度, 在320*480的手机上则占满了全屏, 如果使用dp为单位, 在 这两种分辨率下, 160dp都显示为屏幕一半的长度。 这也是为什么在Android开发中, 写布局的时候要尽量使用dp而不是px的原因。 而sp, 即scale-independent pixels, 与dp类似, 但是可以根据文字大小首选项进行放缩, 是设置字体大小的御用单位。 mdpi、 hdpi、 xdpi、 xxdpi、 xxxdpi 其实之前还有个ldpi, 但是随着移动设备配置的不断升级, 这个像素密度的设备已经很罕见了, 所在现在适配时不需考虑。mdpi、 hdpi、 xdpi、 xxdpi用来修饰Android中的drawable文件夹及values文件夹, 用来区分不同像素密度下的图片和dimen值。那么如何区分呢? Google官方指定按照下列标准进行区分:三、Android屏幕适配1、 线性布局中多使用Weight( 可以按照比例对界面进行分配)2、 布局中多使用RelativeLayout进行控件位置限定;3、使用尺寸限定符, 也就是所说的多种layout或者values例如: 默认布局文件是放到res/layout下, 可以指定具体尺寸的layout如res/layout-large;res/layout-xlarge;res/layout-small还可以进行具体屏幕分辨率和密度进行限定如:4、使用自动拉伸图支持各种屏幕尺寸通常意味着您的图片资源还必须能适应各种尺寸。 例如, 无论要应用到什么形状的按钮上, 按钮背景都必须能适应。 所以使用自动拉伸图更能适合这种情况, 并且自动拉伸图占的大小也比正常的png等格式的图小的多;自动拉伸图通常就是我们所说的 ".9图"; 当然用shape绘制的也可以进行拉伸;5、 文字大小使用非密度制约像素SP, 文字大小可以写入到dimen中, 方便使用多套values尺寸;6、 图片显示使用ScaleType属性; centerCrop,fitCenter,fitXY7、 AndroidManifest中设置支持各种屏幕密度<supports-screensandroid:smallScreens="true"android:normalScreens="true"android:largeScreens="true"android:xlargeScreens="true"/> |
Android屏幕适配篇
最新推荐文章于 2024-08-16 09:28:31 发布