添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Android开发为适配不同屏幕需要在资源文件中添加多套图片或者多套布局文件,这篇文章讲解多套图片。
在这里插入图片描述
ldpi,mdpi,xhdpi,xxhdpi,xxxhdpi分别代表什么?如何使用。

1屏幕大小

智能手机普及,屏幕也随之越来越大,从经典的iPhone 4的3.5英寸到iphone XR 6英寸多,Android手机也逐渐进入了6.x英寸行列。
屏幕大小定义:手机对角线的物理尺寸,以英寸(inch)为单位,一英寸大约2.54厘米。
通常的手机尺寸:4英寸,4.5英寸,4.0英寸,5.0英寸,5.2英寸,5.4英寸,5.99英寸,6.0英寸,6.2英寸等
在这里插入图片描述

2 屏幕分辨率

屏幕分辨率:分辨率是手机屏幕的像素点总数,一般用屏幕宽的像素点数乘以屏幕高的像素点数。分辨率越大屏幕越细腻,能够显示的细节就更多。常用的分辨率包括320x240,640x480,1280x720,1280x960,1080x1920,2560x1440这些只是常用分辨率,所以分辨率还有很多其他数值,他们的单位都是像素。类似1080x1920表示屏幕宽度方向上有1080个像素,屏幕高方向上有1920个像素。

3 像素密度

像素密度(dpi,dots per inch;或PPI,pixels per inch):每英寸上的像素点数,结合屏幕大小和屏幕分辨率如果5.0英寸的手机的屏幕分辨率为1280x720,那么像素密度为192dpi(计算过程为首先计算对角线上的像素数)。

屏幕密度:
像素密度上面已经讲过了,那么什么是屏幕密度呢?
屏幕密度不知道如何定义,其实屏幕密度就是像素密度的另外一种表示,是以160dpi=1.0为基准的。手机出厂之后屏幕密度,包括X,Y轴方向的像素密度都是固定值。
android将实际的屏幕密度进行划分(low,medium,high,and extra high,extra extra high)
一般情况下的普通屏幕:ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi ,xxhdpi 是480dpi。android以像素密度160dpi为基准对屏幕进行划分,当像素密度为160dpi时屏幕密度为1.0,像素密度为120dpi时屏幕密度为0.75,像素密度为320dpi时屏幕密度为2.0.
如何获取屏幕分辨率和像素密度,屏幕密度:

 private void getScreenInfo() {
        // 获取屏幕分辨率
        int screenWidth  = getWindowManager().getDefaultDisplay().getWidth();		// 屏幕宽
        int screenHeight = getWindowManager().getDefaultDisplay().getHeight();		// 屏幕高
        Log.e( "屏幕分辨率", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
        // 获取像素密度和屏幕密度
        DisplayMetrics dm = new DisplayMetrics();
        dm = getResources().getDisplayMetrics();
        float density  = dm.density;		// 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
        int densityDPI = dm.densityDpi;		// 像素密度(每寸像素:120/160/240/320)
        float xdpi = dm.xdpi;               //X轴方向的像素密度
        float ydpi = dm.ydpi;                //Y轴方向的像素密度
        Log.e("XY轴方向上的像素密度", "xdpi=" + xdpi + "; ydpi=" + ydpi);
        Log.e( " 像素密度和屏幕密度", "density=" + density + "; densityDPI=" + densityDPI);
        screenWidth  = dm.widthPixels;		// 屏幕宽
        screenHeight = dm.heightPixels;		// 屏幕高
        Log.e("屏幕分辨率", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
        // 获取屏幕密度(方法3)
        dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        density  = dm.density;
        densityDPI = dm.densityDpi;
        xdpi = dm.xdpi;
        ydpi = dm.ydpi;
        Log.e("屏幕XY轴方向上的像素密度", "xdpi=" + xdpi + "; ydpi=" + ydpi);
        Log.e("屏幕像素密度和屏幕密度", "density=" + density + "; densityDPI=" + densityDPI);
        int screenWidthDip = dm.widthPixels;
        int screenHeightDip = dm.heightPixels;
        Log.e("屏幕XY轴方向上的像素密度", "screenWidthDip=" + screenWidthDip + "; screenHeightDip=" + screenHeightDip);
        screenWidth  = (int)(dm.widthPixels * density + 0.5f);
        screenHeight = (int)(dm.heightPixels * density + 0.5f);
        Log.e(" 屏幕分辨率", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight); 

4 Android手机常见分辨率和drawable适配说明

手机常见尺寸和对应像素密度
4:3的尺寸
VGA :640x480 (Video Graphics Array)
QVGA :320x240 (Quarter VGA)
HVGA :480x320 (Half-size VGA)
SVGA :800x600 (Super VGA)
5:3的尺寸:
WVGA :800x480 (Wide VGA)
16:9的尺寸:
FWVGA: 854x480 (Full Wide VGA)
HD :1920x1080 High Definition
QHD :960x540
720p :1280x720 标清
1080p :1920x1080 高清

一般分辨率对应DPI:
“HVGA mdpi”
"WVGA hdpi "
"FWVGA hdpi "
"QHD hdpi "
“720P xhdpi”
"1080P xxhdpi "
nodpi里面的资源不会被缩放,无论尺寸是否满足条件。
此时会有一个疑问,手机的像素密度可以是任何值,Android手机只有mdpi,hdpi,ldpi,xhdpi,xxhdpi,xxxhdpi等有限的几个适配目录,Android手机如何适配呢,所以可以推测,Android中获取的屏幕密度,不是对应屏幕真实的屏幕密度值,类似1280720和1290730都会被认为是720p的手机,屏幕密度都是2.0。
注意:上面的一般分辨率对应的dpi只代表一般情况,绝大多数厂商都会遵循,这么说的意思是分辨率和像素密度不是上面的对应关系,还跟手机的尺寸相关,这就是我们看到的很多平板比手机大很多,但是它的分辨率依然是1080p,特别是现在很多智能车载比普通的平板还大,它的屏幕分辨率和普通手机一样,适配时可能只会用到mdpi目录。

各个drawable加载顺序:

android系统适配Drawable时会首先查找屏幕密度尺寸都满足的drawable,如果没有找到:
当应用在设备对应dpi目录下没有找到某个资源时,遵循“先高再低”原则,然后按比例缩放图片如果当前为xhdpi设备(项目中只有xxhdpi,xhdpi,xxhdpi,nodpi,mdpi,hdpi),则drawable的寻找顺序为,首先查找xhdpi目录 如果没找到,依然查找xxhdpi,如果还没有找到xxxhdpi,还没有找到查找nodpi,如果还没有查找hdpi,然后查找mdpi,如果在xxhdpi中找到目标图片,则压缩2/3来使用(因为系统认为它找到了一个比合适尺寸大的图片),如果在mdpi中找到图片,则放大2倍来使用(系统认为它找到了一个比适合尺寸小的图片,需要放大才能保证正常)。

5 为什么2017年以后Android手机适配一般只需要xhdpi和xxhdpi两套资源就可以

2017年以后的android手机一般大小在5寸以上,分辨率至少720p,1080p,所以对应的dpi分别为:
720p 1280720 5寸对应dpi 大约 300dpi
1080p 1920
1080 5寸对应dpi 大约440 dpi
xhdpi对应320dpi,xxhdpi对应480dpi,所以手机适配一般只需要xhdpi和xxhdpi两套资源就可以。

注意:对于平板,只能电视和车载系统的开发,一般xhdpi和xxhdpi用不到,ldpi,mdpi用的比较多

6 dp 和px的转换

dp是android中用于适配的尺寸,他能保证在不同尺寸密度屏幕上显示的大小相同,有点类似物理尺寸,相同的dp展示效果相同,它们代表的px是不一样的。
dp与px的转换
系统密度为160dpi的中密度手机屏幕为基准屏幕,即320×480的手机屏幕中,1dp=1px。
而在480×800(hdpi,240dpi)的手机上1dp=1.5px.所以dp和px的换算以屏幕密度为准则而不是屏幕的实际密度。

Android开发为适配不同屏幕需要在资源文件中添加多套图片或者多套布局文件,这篇文章讲解多套图片。ldpi,mdpi,xhdpi,xxhdpi,xxxhdpi分别代表什么?如何使用。1屏幕大小智能手机普及,屏幕也随之越来越大,从经典的iPhone 4的3.5英寸到iphone XR 6英寸多,Android手机也逐渐进入了6.x英寸行列。屏幕大小定义:手机对角线的物理尺寸,以英寸(in...
屏幕 dpi 检测器 基于特征检测的javascript屏幕分辨率像素密度(dppx,dpi)检测器。 还可以识别 ldpi、mdpi、hdpixhdpixxhdpi 和 xxxhdpi 显示。 ldpi(低)~120dpi mdpi)~160dpi hdpi(高)~240dpi xhdpi(超高)~320dpi xxhdpi(超高)~480dpi xxxhdpi(超超超高)~640dpi ###html < script src =" js/screen.dpi.detector.js " type =" text/javascript " > </ script > ###javascript // Features document . getElementById ( "prefix" ) . innerHTML = D
本文涉及到 px、sp、dp(dip)、分辨率dpi像素密度)的概念,以及像素密度的计算 和 px 转换 dp 的计算公式、px、sp、dp互转的java工具类封装。 分辨率:指手机屏幕像素个数,如 720 * 1280 指屏幕宽有720个像素点,高有1280个像素点 PPI英寸像素:Pixles per Inch 又称DPI(Dots-per-Inch),即像素密度,由对角线像素点除以屏...
(1)分辨率分辨率就是手机屏幕像素点数,一般描述成屏幕的“宽×高”,安卓手机屏幕常见的分辨率有480×800、720×1280、1080×1920等。720×1280表示此屏幕在宽度方向有720个像素,在高度方向有1280个像素。 (2)屏幕大小屏幕大小是手机对角线的物理尺寸,以英寸(inch)为单位。比如某某手机为“5寸大屏手机”,就是指对角线的尺寸,5寸×2.54厘米/寸=12.7厘米。...
reference to : http://www.android100.org/html/201505/24/149342.html 不少设计师和工程师都被安卓设备纷繁的屏幕搞得晕头转向,我既做UI设计,也做一部分安卓界面布局,刚好对这块内容比较熟悉,也曾在公司内部做过相关的讲座,在此,我将此部分知识重新梳理出来分享给大家! 1、了解几个概念 (1)分辨率分辨率就是手机屏幕像素点数,一...
VGA     640*480 (Video Graphics Array) QVGA  320*240 (Quarter VGA) HVGA  480*320 (Half-size VGA) SVGA  800*600 (Super VGA) WVGA  800*480 (Wide VGA) FWV...
像素密度的另一种表示形式,android像素密度160dpi为基准对屏幕进行划分,当像素密度为160dpi屏幕密度为1.0,像素密度为120dpi屏幕密度为0.75,像素密度为320dpi屏幕密度为2.0,及即: 屏幕密度 = 像素密度/160。通常,获取到的屏幕分辨率有两种需求,一种是屏幕的实际分辨率,另一种是受顶部或底部的虚拟导航栏占用产生的应用实际可用分辨率(相比实际分辨率减小了占用部分)。分辨率是手机屏幕像素点总数,一般用屏幕宽的像素点数乘以屏幕高的像素点数。一、获取屏幕实际分辨率
文章目录分辨率像素密度ppi&&dpi屏幕尺寸dpipxdp&&dip【附】——dpi系数与px数的计算sp 分辨率屏幕像素总数,例如960*640就是屏幕长度上有960个像素,宽度上有640个像素像素密度ppi&&dpi 屏幕尺寸 屏幕尺寸是指屏幕对角线长度,单位是英寸,1英寸=2.54厘米 像素像素密度,单位是像素/英寸(ppi...
分辨率(Resolution):表示设备屏幕像素点的总数,相同物理尺寸的手机,分辨率越高显示的图像越清晰 像素密度(dpi):是指每英寸的像素点数量,所以同分辨率的两个设备,它们的dpi很可能不一样;如果一个手机分辨率5寸是1080*1920,而一个平板9.7寸分辨率也是1080*1920,那么 手机的dpi会比平板高出很多。 密度无关像素(dip):也就是我们经常在xml文件写的长度单位...
要在Android Studio设置背景图,您可以按照以下步骤操作: 1.在res文件夹创建一个drawable文件夹,并将您想要设置为背景图的图像放入该文件夹。 2.在布局文件找到您想要设置背景图的视图,例如LinearLayout。 3.在该视图的属性添加 android:background="@drawable/your_image_name" 。 -your_image_name 替换为你的图片名称 -如果你的图片是不同尺寸的话,最好使用不同的drawable文件夹来存放不同的尺寸的图片(ldpi,mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi