阅读更多

0顶
1踩

移动开发
本文主要介绍了关于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开发经验是不是有了更多的感悟~
  • 大小: 385.5 KB
  • 大小: 344.5 KB
  • 大小: 342.7 KB
  • 大小: 31.9 KB
  • 大小: 204.2 KB
  • 大小: 79.8 KB
  • 大小: 38.2 KB
  • 大小: 74 KB
  • 大小: 130.5 KB
  • 大小: 118.2 KB
  • 大小: 53.1 KB
0
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 简单谈谈我的Android屏幕适配之路

    ”这样的气,那么学完这篇文章,你就可以回他“我已经适配了,你没看粗来吗?” 我们先来了解两个概念:屏幕尺寸和屏幕的分辨率: 屏幕尺寸: 就是屏幕的对角线的长度,度量单位是英寸,1英寸等于2.54厘米. 例如小米5的...

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

    为什么要适配? 我们先来看一组统计数据和图表。 【2015 设备分布图 】 【2016 设备分布图 】 ...从上面几个图就可以看出 android 设备多,品牌多,屏幕尺寸多,还有系统版

  • Android权威适配,看这篇就够了,

    Android屏幕适配出现的原因 在我们学习如何进行屏幕适配之前,我们需要先了解下为什么Android需要进行屏幕适配。 由于Android系统的开放性,任何用户、开发者、OEM厂商、运营商都可以对Android进行定制,修改成他们...

  • Android沉浸式状态栏,看完这篇就够了!

    Android适配—沉浸式状态栏 Android App 沉浸式状态栏解决方案 Android 沉浸式解析和轮子使用 Android沉浸式(透明)状态栏适配 Android状态栏微技巧,带你真正理解沉浸式模式 android沉浸式状态栏封装—教你玩出新...

  • Android AutoLayout全新的适配方式 堪称适配终结者

    转载请标明出处: ... 本文出自:【张鸿洋的博客】 一、概述相信Android的开发者对于设配问题都比较苦恼,Google官方虽然给出了一系列的建议,但是...个人也比较关注适配的问题,之前也发了几篇关于适配的文章,大致有:

  • 关于Android适配,常用这几种就够了

    关于Android适配的文章,各种论坛,眼花缭乱,有的很有营养,看完收货很大;有的则完全是复制粘贴,鱼目混珠.我仅仅将自己在开发中用到的,感觉对适配有一定帮助的东西,写下来,希望能帮助到和我遇到过相同问题的...

  • flutter系列之:flutter架构什么的,看完这篇文章就全懂了

    Flutter是google开发的一个跨平台的UI构建工具,flutter目前最新的版本是3.0.5...对于JAVA来说,在编写完JAVA代码之后,将其编译成为class字节码,然后这个class字节码就可以不需要进行任何转换的在任何平台上运行。...

  • Android属性动画,看完这篇够用了吧

    旨在通过全文,全面掌握属性动画~如果看完本文,还需要查阅其他文章,说明本文总结得还不够好,欢迎留言补充。 一、属性动画概览 顾名思义,通过控制对象的属性,来实现动画效果。官方定义:定义一个随着时间 (注:...

  • android ui布局适配,Android适配全面总结(一)----屏幕适配

    前言Android适配是一个老生常谈的问题,很多程序员觉得很恶心,不愿意做适配,但是又不得不做。然后老板说,这位兄弟,做好了,今天晚饭给你加个鸡腿,然后程序员开始找各种资料,忙活起来了,最终在苦逼的煎熬中做...

  • Android 10适配要点,作用域存储

    距离Android 10系统正式发布已经过去大半年左右的时间了,你的应用程序已经对它进行适配了吗?在Android 10众多的行为变更当中,有一点是非常值得引起我们重视的,那就是作用域存储。这个新功能直接颠覆了长久以来...

  • Android 今日头条适配详解

    这篇文章是在掘金上看到的,感觉不错。怕时间长了不好找,因此就转载过来,进行保存。 原文地址:https://juejin.cn/post/6844903661819133960 原文作者:JessYan 前言 这个月在 Android 技术圈中 屏幕适配 这个...

  • 一篇文章看明白 Android PackageManagerService 工作流程

    Android - PackageMangerService 分析 概述 PackageManagerService(简称 PKMS),是 Android 系统中核心服务之一,管理着所有跟 package 相关的工作,常见的比如安装、卸载应用。 PackageManagerService 是在 ...

  • Android应用图标微技巧,8.0系统中应用图标的适配

    大家好,2018年的第一篇文章到的稍微有点迟,也是因为在上一个Glide系列结束之后一直还没想到什么好的新题材。现在已经进入了2018年,Android 8.0系统也逐渐开始普及起来了。三星今年推出的最新旗舰机Galaxy S9已经...

  • RESTful 和 GraphQL 怎么选?看完这篇文章,你就明白了

    那么有没有一种方案或者框架,可以使得在用到同一个领域模型(DO或者DTO)的数据时,前端对于这个模型的数据字段需求的改动,后端可以根据前端的改动和需要,自动适配,自动组装需要的字段,返回给前端呢?...

  • 一篇文章看明白 Android 图形系统 Surface 与 SurfaceFlinger 之间的关系

    Android - SurfaceFlinger 图形系统 概述 Android 系统启动过程 Activity 创建过程 Activity 与 Window 与 View 之间的关系 通过前面的知识我们知道了,Android 系统从按下开机键到桌面,从桌面点击 App ...

  • Android 开源项目和文章集合(更新:2022.03.21)

    Kotlin 协程(8) - Android 篇 https://juejin.im/post/5cfe1947e51d45105d63a4e3 4.Android | 《看完不忘系列》之Glide https://juejin.im/post/5f0ec887e51d45349917c614#heading-0 5.这交互炸了系列: 仿微信键盘...

  • Android代码-Android悬浮窗实现(含8.0权限适配)。

    前些日子跟朋友聊天,朋友Z果粉,前些天更新了微信,说微信出了个好方便的功能啊,我问是啥功能啊,看看我大Android有没有,他说现在阅读公众号文章如果有人给你发微信你可以把这篇文章当作悬浮窗悬浮起来,方便你聊...

  • 一篇文章看明白 Android 系统启动时都干了什么

    Android - 系统启动过程 计算机是如何启动的? 首先熟悉一些概念,计算机的硬件包括:CPU,内存,硬盘,显卡,显示器,键盘鼠标等其他输入输出设备。 所有的软件(比如:操作系统)都是存放在硬盘上,程序执行时...

  • 一篇文章看明白 Android 从点击应用图标到界面显示的过程

    Android - Activity 启动过程 概述 从点击桌面应用图标到应用显示的过程我们再熟悉不过了,下面我们来分析下这个过程都做了什么。 本文主要对以下问题分析: ActivityThread 是什么,它是一个线程吗,如何被...

  • 基于STM32单片机的激光雕刻机控制系统设计-含详细步骤和代码

    内容概要:本文详细介绍了基于STM32单片机的激光雕刻机控制系统的设计。系统包括硬件设计、软件设计和机械结构设计,主要功能有可调节激光功率大小、改变雕刻速率、手动定位、精确雕刻及切割。硬件部分包括STM32最小系统、步进电机驱动模块、激光发生器控制电路、人机交互电路和串口通信电路。软件部分涉及STM32CubeMX配置、G代码解析、步进电机控制、激光功率调节和手动定位功能的实现。 适合人群:对嵌入式系统和激光雕刻机感兴趣的工程师和技术人员。 使用场景及目标:① 适用于需要高精度激光雕刻的应用场合;② 为开发类似的激光雕刻控制系统提供设计参考。 阅读建议:本文提供了详细的硬件和软件设计方案,读者应结合实际应用场景进行理解,重点关注电路设计和代码实现。

Global site tag (gtag.js) - Google Analytics