android适配

来源:互联网 发布:卡尔曼滤波算法程序 编辑:程序博客网 时间:2024/06/11 04:48

屏幕适配

为什么要适配屏幕?

    Android碎片化严重,各种不同的厂商定制android的rom,    市面上充斥着各种各样的设备,也有着各种各样的分辨率。

什么是分辨率?

     屏幕的分辨率是指横纵向的上的像素点数,单位是px。     1px为一像素点,一般手机分辨率的表示方法是以纵向像素点*横向像素点(电脑长度大于高度,电脑的分辨率显示的1920*1080是指横向像素点*纵向像素点,与手机相反)。     常见的分辨率有1280*960,1920*1080,一般来说屏幕的分辨率越高,则显示效果越好。

什么是屏幕像素密度(dpi)?

    屏幕像素密度(dpi),英文全拼是:“dot per inch”,译为每英寸显示的像素点数。    计算公式其实也很简单,用中文解释就是:先通过屏幕分辨率计算出屏幕对角线的分辨率,除以屏幕尺寸(屏幕尺寸是对角线长度,单位是英寸)    计算公式为:像素密度 = [开根号(横向像素点数的平方 + 纵向像素点数的平方)]÷屏幕大小。    以一手机分辨率为1920*1080,屏幕尺寸为6英寸,它的dpi为:    dpi = {√[sqr(1920) + sqr(1080) ] } /6 ≈ 367

单位介绍

1.px

    构成图像的最小单位。    一般android使用的屏幕的取值都是px。例如求屏幕的宽和高,那么返回的单位就是px

2.dp,dip

    现在有两台手机,手机甲的分辨率是1280*960,dpi是160,手机乙的分辨率是1920*1080,dpi是180。    假如我要在手机甲上面画一道铺满屏幕的横线,在甲上我要画此横线的像素值为960px,    而在手机乙上画这条横线需要画1080的像素值为1080px。Android手机这么多,如果每个手机都要这样写,无疑加大了开发难度。    所以引入了dp,dip这个单位。    dp.dip的英文全称是“Density Independent Pixels”,即密度无关像素。    以160dpi为基准,1dp = 1px。    那么为什么dp,dip可以解决这个问题呢?    如果我们在手机甲上画一条铺满屏幕的横线,因为手机甲为基准的dpi,所以这条横线的长度为960dp。    而手机乙上,它的dpi是180 = 1.125*160,即1dp = 1.125px。960dp = 960*1.125=1080px即为屏幕宽度的像素值。    所以说,在不同分辨率和不同像素密度的设备上,使用dp为单位可以保证在不同的设备上显示相同的效果。

3.sp

    Sp的英文全称为“Scale Independent Pixels”    主要是为了设置文字的大小的单位。    谷歌官方推荐使用12sp以上单位使用,避免用户看不清字。同时,谷歌推荐我们使用12sp,14sp,18sp和22sp这四种大小作为我们字体的首选大小。    还有不要使用奇数和小数为sp单位,因为可能会在单位转化的时候导致精度的丢失。

这里写图片描述

4.mdpi、hdpi、xdpi、xxdpi

这里写图片描述

    在android新建项目的时候,发现有几个开起来相似,却不一样的文件夹,为什么要设置不同的文件夹呢?    主要是为了我们适配的方便。    因为在不同的像素密度的设备上同一张相片的显示效果是不一样的。为了保证在不同设备设备显示效果一样,我们需要设置几张分辨率大小不同的图片来适配不同的设备。    在创建新项目的时候编译器会自动帮我们创建好不同的文件夹,我们需要做的就是把不同的图片放到不同的文件夹就行了。当程序运行的时候,系统会根据运行设备的分辨率的不同自动选择不同的图片进行填充。

这里写图片描述

    从android开发文档来看

这里写图片描述
在设计图标时,对应五种主流的像素密度(mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi)应该按照2:3:4:6:8的比例进行缩放。
例如,一个启动图片的尺寸为48*48px,这表示在mdpi屏幕表示的尺寸为48*48px,那么进过比例换算,在hdpi上显示的是mdpi的1.5倍,就是72*72px

这里写图片描述
/**********2016/4/3更新*************/
之前很疑惑在Android Studio中如何放置不同分辨率的图片来显示。看了网上有些人数放在mipmap-dpi的目录下,结果发现还是应该在res目录下,新建drawable-mdpi,drawable-hdpi,drawable-xhdpi,drawable-xxhdpi,drawable-xxxhdpi目录。分别将不同分辨率的资源图片放置在不同目录里面就行了

0 0