关于Android适配,看完这篇文章就够了

本文主要介绍了关于Android界面适配的相关内容,适合1-3年的Android开发工程师阅读。

1. 为什么要适配?

我们先来看一组统计数据和图表。

【2014设备分布图 】  

【2015设备分布图 】

【设备品牌分布 】

【屏幕尺寸分布图 】

【系统分布图 】

【与iOS的对比 】

从上面几个图就可以看出android设备多,品牌多,屏幕尺寸多,还有系统版本分布比较大,碎片化比较严重。这也就是android之所以要进行适配的原因。此外,android的适配包括了系统版本的适配,屏幕尺寸的适配等等。

2. 关于适配各种各样的概念

单位

——px (pixel):像素,屏幕上的点,最小的独立显示单位,px均为整数,没有小数。一般都是正方行像素参考链接

——in:表示英寸,每英寸相当于2.54厘米。

概念

——screen size(屏幕尺寸):屏幕的物理尺寸,表示的是对角线长,如手机屏幕3.5寸,就表示对角线长度为3.5寸,大概8.89厘米。

——屏幕分辨率:指屏幕在横边和纵边上的像素点数,单位是px,比如1920*1080 3:

——屏幕像素密度:dpi(dots per inch),每英寸像素点数,比如120dpi,160dpi,它与屏幕尺寸与屏幕分辨率有关。

android单位与换算

dp 或者dip,设备独立像素,即密度无关像素,注意与dpi不同,以160dpi为基准,1dip=1px 屏幕密码,density = dpi / 160,因此如个屏幕密度为1则1dp = 1px, 如果为2则1dp = 2px 3:sp(scale-independent pixels),字体的推荐单位,可以根据文字首选项进行大小缩放,官方建议最小使用值为12sp,其次尽量使用偶数值。

*dpi

mdpi → [120dpi ~ 160dpi]

hdpi → [160dpi ~ 240dpi]

xdpi → [240dpi ~ 320dpi]

xxdpi → [320dpi ~ 480dpi]

xxxdpi → [480dpi ~ 640dpi]

案例

比如一个手机屏幕分辨率480*800 , 屏幕尺寸3.7in,它的dpi是多少,在布局中宽设置320dp,该宽度为多少像素?

理论计算值:先计算出对角线的像素点数480 480 + 800 800 = 933933,再计算出每英寸的像素点数 933/3.7 = 252dpi,最终计算出的dpi为252。 计算320dp对应的像素值:首先计算出屏幕密度,屏幕密度值则相当于1dp对应的像素值: 320 (252/160) = 504px, (手机屏幕才480px,算出的宽度居然比屏幕还宽,如果成立,则说明如果在上诉屏幕上设置为320dp,则有一部分处于屏幕外)

注意:手机上面计算出的DPI为理论值,实际上只有120(low)、160(medium)、240(high)、320(xhigh)等这几种, 因此实际的计算公式为: 320 (240 /160)=480px,与屏幕宽度相同,说明在上诉屏幕设置为320dp,刚好占据整个屏幕。

3. 怎么适配?

上面仅仅是知道了为什么适配,和各种各样的概念,那怎么适配?这里主要看手机,不涉及平板适配。

切图规则

从上面的概念我们知道,160dpi的时候 1dp=1px,因此在设计图标时,(mdpi, hdpi,xhpi,xxhpi,xxhpi)的比例值为 2:3:4:6:8。比如系统icon,mdpi为4848,则xdpi为7272,比例值为1.5。 从上图res结构看到有一类mipmap- *文件夹,这个系统新加为了放置系统图标的文件夹。

各种图标的尺寸

以下是官方建议的图标尺寸

宽度值设置

我们先来看看我们在一个界面中设置一个320dp宽度的一个view。

从图上可以看到不同的屏幕上展示了不同的效果(忽略平板),有的手机上占满了整个屏幕宽度,而有的手机上确只占据屏幕宽度的一部分。因此在视觉出图的时候,比如已800 * 480的尺寸出图,标注占满整个屏幕宽度240dp,则真实展现的效果则会在各个手机上不一致。

因此在开发中,可以采用match_parent来设置占满整个屏幕,如果是其他尺寸,可以采用自适应或者weight来设置view所占用的宽高。

限定符

我们从上面看到有*dpi作为了限定符,同时还有其他的比如large限定符,sw限定符等等限定符,就不一一展开了。

.9图片

.9图为系统在图片周围加一个像素的透明边,图片必须要以.9作为描述符。 比如以一个图片来作为背景,如果不是.9图片,则如果内容区域大于图标,则图片会被拉伸。下图四个角都被拉伸了。

下图设置了图片的拉伸区域,则可以看到图片的四个角都未被拉伸,这样最终呈现的视觉效果就好很多。

标注位置:相邻两边进行标注,不能只标注一边,也不能只标注相对的两边,如果只标注两边,则拉伸区域为相交部分,文本区域为右边与下边控制,如果不标注则沾满整个宽度。

同时需要注意的是:图片可以分段标注,但图片最终拉伸的效果与标注的像素点有关,比如同一边上下均被标注且上下像素点比为3:1,则最终拉伸比例也是3:1。

4. 更多Tips

a:hdpi ,xhdpi等中的相同图片大小要成比例,这样才能在相同屏幕不同分辨率下展现一致。注意上面的2:3:4:6:8

b:同一类型,图片大小要一致,可能多人做多个模块,导致切除的同一类型图片相差1,2个像素(可以建立一个资源库,反查已有图标尺寸)。

c:相同图片问题,不同人做不同模块,很多图标都是相同的,由于开发不同,会导致一个包中有相同图片,这样会导致包大小增长。

d:能使用纯色的图片,就让开发尽量使用颜色值,不用切图。

e:jpg与png图片相比较,jpg大小会小很多,如果有大图且没有模糊渐变等要求,尽量采用jpg格式。

f:很多简单图片都能用代码实现,比如圆,矩形等,可以让开发用代码实现,减少包的大小。

g:如果包的大小太大时,尽量保证更高尺寸的图片存在,这样低屏幕密度的手机也能展现很清晰的图片,但是如果只有小图,就会放大拉伸,会导致图片变形或者不清晰。

h:.9注意标注拉伸区域与内容区域,与图片外边距的padding,可以在图上直接标注。(如果内容区域上下距离不相等,再填充多行文字时会造成文字不居中,这时可以直接在图片上空出padding)

i:.9图片只能拉伸不能压缩,压缩会导致图片变形,因此在作图过程中要确定一下图片的最小尺寸,(比如,给出一个确定高度的矩形区域,里面放置一个初始高度大于矩形的.9图片,会导致图片压缩)。

j:.9图片一般只做小尺寸就可以,除非边框有渐变等元素,才做多个尺寸。

k:关于图片标注,美术要转换一下单位,px转换到相应的dp上,开发可以直接使用该数值。

l:关于字体,字体大小sp,但是如果字体呈现在一个固定高度的矩形框中时,再能调整字体大小的手机上时,可能会展示不全(展现字体的外部图片,背景等尽量不要写死高度)。

m:标注图片时,如果一个icon占满整个宽度,则可以不用标注icon宽度尺寸,只需要标注距离边框的尺寸,开发会采用自适应,如果确定宽度,在有的屏幕上只能占据一半宽度,

看到这里,不知道你对自己的Android开发经验是不是有了更多的感悟~ 本周二,我们邀请了网易云音乐资深移动开发工程师程寅与大家分享移动开发相关的工作经验。

作者:孙有军

来源:51CTO

时间: 2024-08-03 16:12:43

关于Android适配,看完这篇文章就够了的相关文章

看完这篇文章后,别再说自己不懂用户画像了

用户画像是一个挺新颖的词,最初它是大数据行业言必及之的时髦概念.现在我们运营谈及用户画像,它也是和精准营销.精细化运营直接钩挂的.这篇文章主要讲产品和运营角度的用户画像. 希望看完后,解决你一切关于用户画像的疑问. 什么是用户画像 用户画像一点也不神秘,它是根据用户在互联网留下的种种数据,主动或被动地收集,最后加工成一系列的标签.比如猜用户是男是女,哪里人,工资多少,有没有谈恋爱,喜欢什么,准备剁手购物吗? 我们常把用户标签和用户画像对等.但凡用户画像的文章,类似上文图片都会出现,有用烂的趋势.

看完这篇文章 你是不是也有选择地图软件的标准了

笔者是个路痴,出行基本靠地图软件导航,手机里的地图软件也是装了一大堆,也算得上颇有心得.在使用某地图软件时,被一个微小细节感到恼火.相信大家都有因走错路着急的时候,使用某些地图时会直接提示,"偏离路线,正在重新规划",结果我更着急了.而百度地图会默不作声的重新规划路线,让我并没有走错路的感知.就凭这一点,百度地图是我手机里唯一的地图软件. 下面言归正传,在以往的认知里,地图软件仅仅是方便大家出行导航.查询路线,而到了移动互联网时代,高速路况云端干预.步行导航.公交到站提醒.代驾.电子狗

看完这篇文章,你们都想去GitHub上班了吧

如果你想进入 GitHub 工作--这家软件开发协作中心基于开源的 Git项目 打造--那你必须独立自主,并能够在大多数公司认为是正常运营准则的界限之外开展工作. 你不必到办公室报到,事实上,你被鼓励在任何你喜欢的地点和时间工作.由于缺乏正式的组织结构,GitHub 将正式会议保持在最低限度.员工的大部分工作都是在网络聊天室完成的,而评估他们的依据则是生产效率. 然而,尽管具备这种不走寻常路的精神,GitHub 有非正式的一面,但也有正式的一面.员工处在哪一面,这在很大程度上取决于他们的职位--

看完这篇文章才知道什么是“通信人”

早晨在上班的路上,打开智能手机浏览微信朋友圈最新动态,查看最新工作邮件.上班之后打开电脑,实时浏览最新的新闻报道,收集自己感兴趣的内容素材.中午通过移动支付购买午餐,分享最新的图片和资讯.下班后打开电脑查看最新的体育比赛回放-这是典型媒体小编的一天,也是现代互联网生活的一天. 据最新数据预测,2019年全球互联网普及率将超过50%,届时全球将有38.2亿网民,占总人口的50.6%.随着Wi-Fi覆盖范围扩大.3G/4G的普及,移动互联网使用量将继续保持强势增长.预计2020年,全球手机用户将增至

如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧(下)

上一篇文章发出来之后,为了掐死我,大家真是很下工夫啊,有拿给姐姐看的,有拿给妹妹看的,还有拿给女朋友看的,就是为了听到一句"完全看不懂啊".幸亏我留了个心眼,不然就真的像标题配图那样了.我的文章题目是,如果看了这篇文章你"还"不懂就过来掐死我,潜台词就是在你学了,但是没学明白的情况下看了还是不懂,才过来掐死我. 另外,想跟很多人抱歉,因为评论太多了,时间有限,不能给每个人回复,还望大家谅解.但是很感谢一直在评论区帮忙解答读者问题的各位,就不一一@了. 这里郑重感谢大

看了一篇文章,说天猫的商品详情页面是先存在本地,想请教这个想法的可行性

问题描述 我是初入行的实习生,比不了各位大牛,所以想请问一下,看了一篇文章,说天猫为了双十一,商品详情页这种访问量可以说是最大的类型页面,是先将页面框架保存在本地的,然后用户点开之后,请求数据时,将数据填充进去.我想了想,先用cookie保存现这种访问量超大的页面静态码html+js,然后ajax请求数据json,然后通过js动态绑定数据,感觉理论上好像可行,但是不知道具体实现是不是很难,还有这种做法对性能的提升和对服务器压力的影响有多大,望各位大牛指点一二 解决方案 解决方案二:文章的链接也共

看了这篇文章怎么 怎么生气呢。。。。

问题描述 看了这篇文章怎么怎么生气呢....有同感的支持下.想骂作者....http://www.nb99.net/art.asp?id=1266 解决方案 解决方案二:把.netframework说的巨恶心!解决方案三:看那个人把Java吹的富丽堂黄的,他自己那开发出比Vista更好的系统来吗?解决方案四:这就是不懂乱吹解决方案五:顶解决方案六:这有什么好生气的?.NET不是给网吧机用的...Vista更不是给网吧机用的...至少在目前来看...因为他们的配置无法享受到快感只好发发牢骚...等

震惊!Android 手机为什么没有 iPhone 安全,看完这篇你就知道了

  雷锋网按:如今智能手机和人的亲密程度几乎已经超过了伴侣,所以安全变得尤为重要.实际上,许多人都清楚 Android 手机的安全问题,但它们到底为什么赢得比 iPhone 差的名声呢?其实很多时候是一些基本的措施都没做好,就像本文中发现的问题.本文由雷锋网(公众号:雷锋网)编译自 Arstechnica,原文作者 Dan Goodin. 同很多打开页面正在阅读这篇文章的用户一样,笔者也是 Android 阵营的成员之一.每天当我们在零售商店徘徊,在城市街道穿梭,或者去哪里旅游,我们随身携带的

看完30篇网站推广的文章之后的总结

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 网站的优化服务于网站的推广,网站的推广服务于网络营销,所以我一直认为网站的推广在电子商务中起到一个承上启下的作用,用时它也是电子商务的核心. 俺的网站是 萝卜小说网,一下是俺给你们"偷"来的!呵呵 1. 网站推广 1.)线上推广 注册网络文件夹(qq,114la,百度收藏夹等),去权重比较高的商铺发帖,比如淘宝网.有啊等,