android的适配
A. Android 屏幕适配
1: dp: android 尺寸的基本单位。 在不同的分辨率的手机里面,1dp对应着不同数量的px, 这样就实现了dp定义一个控件大小的时候,在不同分辨率手机里表现出相应大小的像素值。
2: 屏幕分辨率: 1080下160, 表示宽度有1080个像素点而高度有2160个像素点。常见的分辨率有320x480, 480x800, 720x1280, 1080x1920等。
3: 屏幕尺寸: 以寸为单位, Android设备对角线的长度
4: 像素密度: 每英寸的像素点
5: 屏幕尺寸, 分辨率,像素密度 三者之间的关系:
密度(dpi)= √(宽2 + 高2)/屏幕尺寸
6: px:像素,是屏幕上显示数据的最基本的点
7: dpi:屏幕像素密度,每英寸上的像素点数
8: sp:与dp类似,通常用于指定字体的大小,当用户修改手机显示的字体时,字体大小会随之改变。
1: dp适配方案: Android自带的原始的适配方案, 在不同的分辨率手机里面表现出相应大小的像素点。
缺点: Android的碎片化严重, 如果生产厂家没有根据屏幕尺寸、分辨率和像素密度的关系来规则定义, 或者出一些乱七八糟的屏幕大小,这样的适配方案就不在适合了。
2: 宽高限定符:枚举所有的屏幕宽高像素值,根据等比缩放去适配。如果没有找到对应的屏幕, 则取默认的。 目前这种方案已经被弃用。
缺点:
1: 占用资源大,会增加APK的体积。
2: 容错机制大需要精准命中资源文件才能适配,比如1920x1080的手机就一定要找到1920x1080的限定符,否则就只能用统一的默认的dimens文件了。而使用默认的尺寸的话,UI就很可能变形。
3:AndroidAutoLayout适配方案(停止维护)
4: SW限定符适配方案:(smallestWidth最小宽度适配)
Android 会去识别屏幕可用高度或者宽度的最小尺寸的dp值。然后根据识别到的结果去对应的资源文件里面去找寻相应的结果。
如何生成:ScreenMatch插件
此方案跟宽高限定的适配方案相比,有很好的容错机制, 如果没有找到对应的适配宽度, 那么会在vlues文件里面去找跟他最接近的宽度。
5:今日头条适配方案:
1>: px 转 dp 的公式 dp = px / density.不管我们设定的单位是什么, 最终我们都会将这些单位长度转化为px的。density就是他们的转化比, 所以,动态改变这个转化比也是可以达到我们适配屏幕的目的的。
2>: 通过修改density值,强行把所有不同尺寸分辨率的手机的宽度dp值改成一个统一的值(在清单文件中定义),这样就解决了所有的适配问题。
3>: Density = 当前设备屏幕总宽度(单位为像素)/ 设计图总宽度(单位为 dp) ;
4>:引入了AndroidAutoSize屏幕适配框架:
https://github.com/JessYanCoding/AndroidAutoSize
最后, 最重要的................
点赞 点赞 点赞, 不重要的事情也就说3遍......
B. Android机型适配总结
分辨率对应DPI
ldpi QVGA (240×320)
mdpi HVGA (320×480)
hdpi WVGA (480×800),FWVGA (480×854)
xhdpi 720P(1280*720)
xxhdpi 1080p(1920*1080 )
xxxhdpi 4K(3840×2160)
机型适配方面常规处理方法:
1、开发之前UI给出不同尺寸标准的多套素材,一般情况下给出:hdpi、xhdpi、xxxhdpi 三种尺寸类型的素材。
2、特殊类型图片使用Android Studio内置draw9path工具进行制作,例如聊天界面中内容背景图片。
3、布局编写时尽量使用 Linearlayout 与 RelativeLayout,LinearLayout内部可以使用weight(权重)属性将子控件的尺寸按比例进行设置。RelativeLayout 内部可以使用layout_align...(相对于xxx)属性将子控件的尺寸相对于父控件或相对于其他子控件进行设置。
4、设置尺寸的时候长度单位 布局使用 dp 字符使用 sp。 其实字体大小的尺寸使用 dp 也可以,但是sp的情况下 用户使用系统设置字体大小的时候可以改变控件中字体的大小,但是使用dp设置的字体就不会产生变化。
5、针对每一个屏幕的尺寸生成一套px与dp的转换方案,详情见博客: Android机型适配方案 。
6、google推出了一个百分比布局库,可以使用百分比的方式进行布局尺寸的设置,详情见博客: Android百分比布局库(percent-support-lib)解析与扩展
7、利用自定义View的方式去解决,其实原理也是,在绘制View的时候,获取屏幕的尺寸然后按照一定的比例去设置控件的尺寸
还有一些琐碎知识点需要了解并记住:
1. px (pixels)像素 :
一个像素通常被视为图像的最小的完整采样,这个用的比较多,特别是web开发,页面基本都是使用像素作为单位的.
2.dp:
这个是最常用但也最难理解的尺寸单位。它与“像素密度”密切相关,所以首先我们解释一下什么是像素密度。假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),160dpi就是这部手机的像素密度,像素密度的单位dpi是Dots Per Inch的缩写,即每英寸像素数量。横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。
不同的手机/平板可能具有不同的像素密度,例如同为4寸手机,有480x320分辨率的也有800x480分辨率的,前者的像素密度就比较低。Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它们对应的dp到px的系数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。例如界面上有一个长度为“80dp”的图片,那么它在240dpi的手机上实际显示为80x1.5=120px,在320dpi的手机上实际显示为80x2=160px。如果你拿这两部手机放在一起对比,会发现这个图片的物理尺寸“差不多”。
3.dip:
与dp完全相同,只是名字不同而已。在早期的Android版本里多使用dip,后来为了与sp统一就建议使用dp这个名字了。
4.sp:
与缩放无关的抽象像素(Scale-independent Pixel)。sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。
还有一些详细的情况需要了解,都在这个博客里: 点击进入
C. android 屏幕适配
@[TOC](文章目录)
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
# 前言
<font color=#999AAA >使用工具Android studio,利用values文件下dimens.xml界面适配安卓屏幕</font>
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
<font color=#999AAA >提示:以下是本篇文章正文内容,下面案例可供参考
# 一、概念
1.屏幕分辨率单位是px,例如Android手机常见的分辨率:320x480px、480x800px、720x1280px、1080x1920px。
2.手机屏幕的密度:每英寸的像素点数,单位是dpi。
| 密度类型 |代表的分辨率(px)| 屏幕像素密度(dpi) | 1dp转换为px |
|:--------|:--------|:--------|:--------|
| 低密度(ldpi) |240x320|120|0.75|
| 中密度(mdpi) |320x480|160|1|
| 高密度(hdpi)|480x800|240| 1.5|
| 超高密度(xhdpi)|720x1280|320|2|
| 超超高密度(xxhdpi) |1080x1920|480|3|
3.由于android的机型屏幕大小品类太多了,有一些是不标准的,这时我们就需要单独去获取屏幕的分辨率和密度了。
# 二、获取屏幕的分辨率和密度
```java
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
float density = displayMetrics.density;
int densityDpi = displayMetrics.densityDpi;
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
Log.e("123","密度:"+density+"---"+densityDpi);
Log.e("123","屏幕分辨率:"+width+"x"+height);
Log.e("123","安卓系统:"+android.os.Build.VERSION.RELEASE);
Log.e("123","手表型号:"+android.os.Build.PRODUCT);
```
# 三、SmallestWidth适配
**smallestWidth适配,或者叫sw限定符适配。指的是Android会识别屏幕可用高度和宽度的最小尺寸的dp值(其实就是手机的宽度值),然后根据识别到的结果去资源文件中寻找对应限定符的文件夹下的资源文件。**
**sw计算公式:sw = 屏幕宽度 / (dpi/160) 注:160是默认的**
**例如:屏幕宽度为1080px、480dpi 的sw = 1080/(480/160)**
# 四、生成 dimens 文件
1、 首先在 res 目录下新建各种尺寸的 values 文件 。文件名为:values-sw(你要适配屏幕的sw值)dp。
例如:

注意:values文件下也生成 dimens文件
**生成dimens值工具类**
1、先生成标准的值。//value = (i + 1) * 1;
2、再用生成其他的值。 //value = (i + 1) * 需要生成的sw值/标准的sw值;
例如:value = (i + 1) * 160 / 320;
```java
public static void genDimen() {
StringBuilder stringBuilder = new StringBuilder();
try {
double value;
for (int i = 0; i < 500; i++) {
//value = (i + 1) * 1; //这里控制对应转换的值,如果是标准尺寸就一对一转换
//value = (i + 1) * 需要生成的sw值/标准的sw值; //这里控制对应转换的值
value = (i + 1) * 1
//value = (i + 1) * 160 / 320;
value = Math.round(value * 100) / 100;
//dp可改成sp
stringBuilder.append("<dimen name=\"size_" + (i + 1) + "\">" + value + "dp</dimen>\r\n");
}
if (stringBuilder.length() > 4000) {
for (int i = 0; i < stringBuilder.length(); i += 4000) {
if (i + 4000 < stringBuilder.length())
Log.e("123", stringBuilder.substring(i, i + 4000));
else
Log.e("123", stringBuilder.substring(i, stringBuilder.length()));
}
} else {
Log.e("123", stringBuilder.toString());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
```
示例:(我这是以sw320为适配的标准的,你们可改自己的标准)
1、sw320的样例
```java
<resources>
<dimen name="dimen_1">1.0dp</dimen>
<dimen name="dimen_2">2.0dp</dimen>
<dimen name="dimen_3">3.0dp</dimen>
<dimen name="dimen_4">4.0dp</dimen>
<dimen name="dimen_5">5.0dp</dimen>
<dimen name="dimen_6">6.0dp</dimen>
<dimen name="dimen_7">7.0dp</dimen>
<dimen name="dimen_8">8.0dp</dimen>
<dimen name="dimen_9">9.0dp</dimen>
<dimen name="dimen_10">10.0dp</dimen>
<dimen name="size_1">1.0sp</dimen>
<dimen name="size_2">2.0sp</dimen>
<dimen name="size_3">3.0sp</dimen>
<dimen name="size_4">4.0sp</dimen>
<dimen name="size_5">5.0sp</dimen>
<dimen name="size_6">6.0sp</dimen>
<dimen name="size_7">7.0sp</dimen>
<dimen name="size_8">8.0sp</dimen>
<dimen name="size_9">9.0sp</dimen>
<dimen name="size_10">10.0sp</dimen>
</resources>
```
2、sw160的样例
```java
<resources>
<dimen name="dimen_1">0.0dp</dimen>
<dimen name="dimen_2">1.0dp</dimen>
<dimen name="dimen_3">1.0dp</dimen>
<dimen name="dimen_4">2.0dp</dimen>
<dimen name="dimen_5">2.0dp</dimen>
<dimen name="dimen_6">3.0dp</dimen>
<dimen name="dimen_7">3.0dp</dimen>
<dimen name="dimen_8">4.0dp</dimen>
<dimen name="dimen_9">4.0dp</dimen>
<dimen name="dimen_10">5.0dp</dimen>
<dimen name="size_1">0.0sp</dimen>
<dimen name="size_2">1.0sp</dimen>
<dimen name="size_3">1.0sp</dimen>
<dimen name="size_4">2.0sp</dimen>
<dimen name="size_5">2.0sp</dimen>
<dimen name="size_6">3.0sp</dimen>
<dimen name="size_7">3.0sp</dimen>
<dimen name="size_8">4.0sp</dimen>
<dimen name="size_9">4.0sp</dimen>
<dimen name="size_10">5.0sp</dimen>
</resources>
```
3、xml界面控件使用样例
```java
<TextView
android:layout_width="@dimen/dimen_30"
android:layout_height="@dimen/dimen_30"
android:textSize="@dimen/size_20"
android:layout_margin="@dimen/dimen_10"
android:padding="@dimen/dimen_10">
```
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
# 总结
<font color=#999999 >提示:这里对文章进行总结:
如果你的app需要适配dpi较低的屏幕,最好以最小dpi的sw为适配的标准。
D. Android-屏幕适配全攻略(绝对详细)(一)
关键字: 屏幕适配 px dp dpi sp large限定符 .9.png
前言: 这篇文章依然是我在 [慕课网 ][h]学习 凯子哥 的同名视频 Android-屏幕适配全攻略 ,所记录下来的笔记---凯子哥讲得真的超详细。
[h]: http://www.imooc.com/ "MOOC"
从上图可以看出,主流的分辨率是前六种:1280×720、1920×1080、800×480、854×480、960×540、1184×720,不过我们有解决方案。看完这篇文章,想必你就可以解决常见的屏幕适配问题。
接下来正式进入正题。
介绍几个在Android屏幕适配上非常重要的名词:
屏幕尺寸 是指屏幕对角线的长度。单位是英寸,1英寸=2.54厘米
屏幕分辨率 是指在横纵向上的像素点数,单位是px,1px=1像素点,一般是纵向像素横向像素,如1280×720
屏幕像素密度 是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写,像素密度和屏幕尺寸和屏幕分辨率有关
dip: Density Independent Pixels(密度无关像素)的缩写。以 160dpi 为基准,1dp=1px
dp: 同 dip
dpi: 屏幕像素密度的单位,“dot per inch”的缩写
px: 像素,物理上的绝对单位
sp: Scale-Independent Pixels的缩写,可以根据文字大小首选项自动进行缩放。Google推荐我们使用12sp以上的大小,通常可以使用12sp,14sp,18sp,22sp,最好不要使用奇数和小数。
用于区分不同的像素密度。
在Google官方开发文档中,说明了 ** mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi=2:3:4:6:8 ** 的尺寸比例进行缩放。例如,一个图标的大小为48×48dp,表示在mdpi上,实际大小为48×48px,在hdpi像素密度上,实际尺寸为mdpi上的1.5倍,即72×72px,以此类推。
我们可以通过以下几种方式来支持各种屏幕尺寸:
wrap_content: 根据控件的内容设置控件的尺寸
math_parent: 根据父控件的尺寸大小设置控件的尺寸
weight: 权重,在线性布局中可以使用weight属性设置控件所占的比例
例如,我们要实现下图所显示的效果:当屏幕尺寸改变时,new reader控件两边的控件大小不变,new reader控件会占完剩余的空间。
具体布局文件如下:
小插曲: 关于 android:layout_weight 属性
一般情况,我们都是设置要进行比例分配的方向的宽度为0dp,然后再用权重进行分配。如下:
效果为:
效果为:
button1宽度=L+(L-2L)×1/3=2/3L
button2宽度=L+(L-2L)×2/3=1/3L
当然,还有其他的方式,都可以运用此公式进行计算。
在实际开发中,我们一般使用0dp的方式,而不使用其他方式。
简单的布局一般都使用 线性布局 ,而略微复杂点的布局,我们使用 相对布局 ,大多数时候,我们都是使用这两种布局的嵌套。
我们使用 相对布局 的原因是, 相对布局 能在各种尺寸的屏幕上保持控件间的相对位置。
res/layout/main.xml 单面板:
res/layout-large/main.xml 双面板:
如果这个程序运行在屏幕尺寸大于7inch的设备上,系统就会加载 res/layout-large/main.xml 而不是 res/layout/main.xml ,在小于7inch的设备上就会加载 res/layout/main.xml 。
需要注意的是,这种通过 large 限定符分辨屏幕尺寸的方法,适用于android3.2之前。在android3.2之后,为了更精确地分辨屏幕尺寸大小,Google推出了最小宽度限定符。
res/layout-sw600dp/main.xml ,双面板布局: Small Width 最小宽度
这种方式是不区分屏幕方向的。这种最小宽度限定符适用于android3.2之后,所以如果要适配android全部的版本,就要使用 large 限定符和 sw600dp 文件同时存在于项目 res 目录下。
这就要求我们维护两个相同功能的文件。为了避免繁琐操作,我们就要使用布局别名。
由于后两个文具文件一样,我们可以用以下两个文件代替上面三个布局文件:
res/layout/main.xml 单面板布局
res/layout/main_twopanes.xml 双面板布局
然后在 res 下建立
res/values/layout.xml 、
res/values-large/layout.xml 、
res/values-sw600dp/layout.xml 三个文件。
默认布局
res/values/layout.xml :
Android3.2之前的平板布局
res/values-large/layout.xml :
Android3.2之后的平板布局
res/values-sw600dp/layout.xml :
这样就有了 main 为别名的布局。
在activity中 setContentView(R.layout.main);
这样,程序在运行时,就会检测手机的屏幕大小,如果是平板设备就会加载 res/layout/main_twopanes.xml ,如果是手机设备,就会加载 res/layout/main.xml 。我们就解决了只使用一个布局文件来适配android3.2前后的所有平板设备。
如果我们要求给横屏、竖屏显示的布局不一样。就可以使用 屏幕方向限定符 来实现。
例如,要在平板上实现横竖屏显示不用的布局,可以用以下方式实现。
res/values-sw600dp-land/layouts.xml :横屏
res/values-sw600dp-port/layouts.xml :竖屏
自动拉伸位图,即android下特有的 .9.png 图片格式。
当我们需要使图片在拉伸后还能保持一定的显示效果,比如,不能使图片中的重要像素拉伸,不能使内容区域受到拉伸的影响,我们就可以使用 .9.png 图来实现。
要使用 .9.png ,必须先得创建 .9.png 图片,androidSDK给我们提供了的工具就包含 .9.png 文件的创建和修改工具。双击 SDK安装目录 oolsdraw9patch.bat ,就会打开下图所示的窗口。
下面是一个例子:
Button属性设置:
如果我们选择的内容区域偏差太大,可能就不会显示出text值 BUTTON 。
好了,这篇文章写的有点多了,剩下的内容放在 下篇文章 记录吧。
内容提要:
解决方案-支持各种屏幕密度
解决方案-实施自适应用户界面流程
未完待续
E. Android设备的界面适配设计
Android设备App设计中有一个问题可能会被设计师忽略,在各种分辨率各种尺寸“杂屏”的界面适配。可能产出的界面稿在常用的720*1280的分辨率中是完美,但一到各个不同分辨率不同尺寸的设备后
这里就谈谈适配,了解适配让设计从PS、sketch到移动设备上都能完美呈现。
如此繁杂的安卓设备,采用哪个标准设计呢?
1.选择一种尺寸一种分辨率作为基准。
2.选择2-3款主流的Android设备,制定一套适配规则。(国内主流设备、分辨率可参考友盟指数)
3.部分极端效果特别注释说明。
目前移动端设计师多采用iPhone 5与6的分辨率设计,这两个分辨率也最接近Android xhdpi的720*1280,设计之后再做等比适配(不做设计元素等比适配会导致Android设备上视觉呈现较小)。
我则倾向于选取720*1280的分辨率设计。优点是处于常用分辨率的中间值,对小分辨率大分辨率调整也较容易。另外iOS@1x的320与720刚好是2.25的倍率关系,使用sketch等比输出快捷多了。(如果时间成本允许的话可以将Android的标注单位用dp,具体的设备尺寸、分辨率知识这里不详描述,可见文章最后面的“Android基础知识”)
案例说明:
雅虎新闻为各个dpi做了优化,图片等比缩放,文字区域等比缩放,并且考虑到在低dpi下会被推移至第二屏,就减小图片了高度,保持文字区域最小高度。
老司机都不会忘记的,仅提醒下新手,每个图标记得输出多个比例。并且记得查看各个比例下图标的显示效果。
案例说明:
还是拿一个雅虎新闻的例子,大家感受下。
Android设备的系统各个厂商都做了定制化,默认的字体库可能不同,且字体占空间大小可能不同。不同设备显示文字会出现不同效果。设计时考虑3点:
多采用流式布局,不对单行做字数限制(如“单行显示多少个字”“文本宽度多少”),而是定义文本容器的高宽,超出则用“…”“渐隐”或者“遮挡”等方式省略。
若较长的文本需要完整显示,设计时预留换行空间。
若文本需要在单行完整显示(如提示类文字),尽量控制字数(建议16字内),避免小屏不够放置。
案例说明:
图文混排同一行显示时,图片等比固定在右侧显示,文字部分区域宽度会因设备不同出现较大的差异,预留文字多行高度。如下图不同设备下文字的展示空间有差异,需要考虑小分辨率下预留多行文字空间。如图2第二条新闻标题文字溢出的丑陋展示,建议设定一个文字区域最大高度,超出部分则隐藏。
单行出现多个文字符素时,注意元素在低dpi下的显示层级,提前说明好该情况的覆盖或者隐藏规则。如下图第一个用户名称,在低dpi下,避免各元素交错,而省略了超出的用户名称。
图片常用的方式有固定宽度dp等比缩放高度(用于非通栏图片);固定高度dp等比缩放宽度(用于横向滚动图片,如全屏相册中的纵向图片);根据屏幕宽度等比缩放(横向通栏图片)。设计时考虑3点:
注意图片占用的宽高比,避免大屏设备上占据大量空间,导致内容比例不协调同时降低了屏幕利用率。
考虑到设备屏幕密度不同,输出图片时别忘了输出多个分辨率。
考虑图片宽高比过大的缩略图处理(最常见的处理方式:高度远大于宽度时,是给出最大区域,让图片等宽居中填充该区域,只显示该区域;宽度远大于高度时,与展示区域等高居中取部分显示。当然也可能出现特殊显示要求,需要根据具体情况具体处理。)
案例说明:
网易游戏相册的全屏浏览中,大于设备宽高比的宽图按照最大宽度放置,小于设备宽高比的高度按照最大高度放置。
一行多张图片要考虑图片的在不同设备下等比缩放带来显示效果的差异。排列时会有两种情况:
1.要求在一行内显示完,根据图片的显示效果决定放置的数量,超过则不显示(如下图1第二条新闻)
2.流式布局,当图片宽度小于设定值时自动换行(如下图2相册展示,低dpi低分辨率设备一行显示3张,高的显示4-5张,且按比例撑满屏幕宽度)。
宽高比超出设计区域时的处理,如网络贴吧中列表的小图模式,给出了正方形区域,当图片非正方形时,根据宽高中的短边等比撑满正方形区域后,截取了图片居中的部分显示。
在固定区域内多元素混合放置时,文字一般采取流式布局,图片多采用等比缩放,图标元素多采用 弹性布局,即元素内容本身规格不变,考虑水平、垂直方向的间距做相应扩展。设备屏幕越大,在扩展方向上可以显示更多内容,发挥了大屏幕的优势。
弹性布局需要给出哪一个元素dp不变,哪一个元素缩放的策略。
弹性布局下部分距离标注采用百分比标注。
当有两个等比缩放元素时考虑避免重叠的情况。
案例说明:
网易游戏的新闻列表样式,每一条新闻区域,要求图片dp不变,而文字区域进行弹性缩放。
下图网易游戏专区中间的幽灵按钮图标为确保点按效果,按照固定dp显示,中间间隔的宽度按照设备宽度的百分比来确定
网易游戏求交往的界面,中间卡片区域大小根据设备等比缩放,如中间用户头像与“同喜欢2款游戏”的文字,在设计时需要考虑产品的目标设备中最小设备下的布局显示效果,避免出现重叠的情况。而纵向的元素数量也需要如此考虑。
Android界面适配的案例说明就写到这里啦。
设计时多考虑各个元素(图标、文本、图片、区域)在不同设备的情况。当然,做设计时也不是死板的按照建议来实现,特别是固定区域下的元素放置,根据实际情况来处理即可。
Android系统的UI也在不断进化完善,随着设计趋势的改变,Android除了常见的卡片、列表、浮层外,可能会有更多的展示方式,而Android设备也是逐渐淘汰ldpi与mdpi,设备的分辨率逐渐变大。也就要求我们需要不断的去了解尝试新的设计趋势,产出最好的方案。
这不是彩蛋哈,仅仅补充安卓设备的基础知识,老司机完全可以忽略,供新手参考阅读。
为展示设备的多样化,贴出Android屏幕尺寸示意图(蓝色矩形的大小代表不同尺寸,颜色深浅则代表所占百分比的大小。)
屏幕大小以屏幕尺寸来衡量,指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米
目前的主流尺寸:5.0" ~ 5.5" (有继续往更大尺寸发展的趋势,但趋于稳定)
常见的设备尺寸: 4" ~ 10" 。
手机适配参考尺寸: 4" ~ 6"
手机 + 平板适配参考尺寸: 4" ~ 10”
屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080。
屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。目前每个屏幕像素可以认为就是一个“点”。
屏幕 dpi 的计算方式:
Android 设备中 dpi 分几个段:
•ldpi:~ 120 dpi (几乎绝迹)
•mdpi:~ 160 dpi (罕见)
•hdpi:~ 240 dpi (逐渐减少中)
•xhdpi:~ 320 dpi
•xxhdpi:~ 480 dpi
•xxxhdpi:~ 640dpi (目前较少)
dp(与 dip 同义) 是在 160dpi 下每个像素对应的物理尺寸,可近似理解为:
•160 dp = 1 inch
•1 dp = 1 / 160 inch = 0.15875 mm
•1 dp = 1 px (160 dpi 屏幕下)
•1 dp = 2 px (320 dpi 屏幕下)
Android的屏幕适配指标都基于物理尺寸(即屏幕的物理大小),而非像素(分辨率)。为什么呢?这里根据dp与px适配出两种效果来说明。
按 dp 适配不同屏幕的效果如下,内容的物理尺寸变化不大:
若直接按照像素适配,出现以下情况,高像素密度的设备内容显得特别小,影响布局与可用性:
屏幕长边和短边的比例。
目前手持设备的 长边 dpi 和 短边 dpi 普遍非常接近,可认为屏幕比例和屏幕水平、垂直像素比例一致
屏幕比例目前趋于 16:9 ~ 16:10 (8:5)
因不少设备使用了虚拟按键,所以通常非全屏的 app 可用面积略低,屏幕比例更接近 16:10