Android-目前最稳定和高效的UI适配方案(1)

这篇具有很好参考价值的文章主要介绍了Android-目前最稳定和高效的UI适配方案(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

然后我们就可以直接在布局文件里面使用具体的像素值了,比如,设计稿上是96*96,那么我们可以直接写96px,APP运行时,框架会帮助我们根据不同手机的具体尺寸按比例伸缩。

这可以说是一个极好的方案,因为它在宽高限定符适配的基础上更进一步,并且解决了容错机制的问题,可以说完美的达成了开发高效和适配精准的两个要求。

但是我们能够想到,因为框架要在运行时会在onMeasure里面做变换,我们自定义的控件可能会被影响或限制,可能有些特定的控件,需要单独适配,这里面可能存在的暗坑是不可预见的,还有一个比较重要的问题,那就是整个适配工作是有框架完成的,而不是系统完成的,一旦使用这个框架,未来一旦遇到很难解决的问题,替换起来是非常麻烦的,而且项目一旦停止维护,后续的升级就只能靠你自己了,这种代价团队能否承受?当然,它已经停止维护了。

不过仅仅就技术方案而言,不可否认,这是一个很好的开源项目。

小结

讨论的上述几种适配方案都是可以实际用于开发中的比较成熟的方案,而且确实有很多开发者正在使用。不过由于他们各自都存在一些缺陷,所以我们使用了上述方案后还需要花费额外的精力着手解决这些可能存在的缺陷。

那么,是否存在一种相对比较完美,没有明显的缺陷的方案呢?

smallestWidth适配

smallestWidth适配,或者叫sw限定符适配。指的是Android会识别屏幕可用高度和宽度的最小尺寸的dp值(其实就是手机的宽度值),然后根据识别到的结果去资源文件中寻找对应限定符的文件夹下的资源文件。

这种机制和上文提到的宽高限定符适配原理上是一样的,都是系统通过特定的规则来选择对应的文件。

举个例子,小米5的dpi是480,横向像素是1080px,根据px=dp(dpi/160),横向的dp值是1080/(480/160),也就是360dp,系统就会去寻找是否存在value-sw360dp的文件夹以及对应的资源文件。

Android-目前最稳定和高效的UI适配方案(1),Android程序员,android,ui

smallestWidth限定符适配和宽高限定符适配最大的区别在于,前者有很好的容错机制,如果没有value-sw360dp文件夹,系统会向下寻找,比如离360dp最近的只有value-sw350dp,那么Android就会选择value-sw350dp文件夹下面的资源文件。这个特性就完美的解决了上文提到的宽高限定符的容错问题。

这套方案是上述几种方案中最接近完美的方案。

首先,从开发效率上,它不逊色于上述任意一种方案。根据固定的放缩比例,我们基本可以按照UI设计的尺寸不假思索的填写对应的dimens引用。
我们还有以375个像素宽度的设计稿为例,在values-sw360dp文件夹下的diemns文件应该怎么编写呢?这个文件夹下,意味着手机的最小宽度的dp值是360,我们把360dp等分成375等份,每一个设计稿中的像素,大概代表smallestWidth值为360dp的手机中的0.96dp,那么接下来的事情就很简单了,假如设计稿上出现了一个10px*10px的ImageView,那么,我们就可以不假思索的在layout文件中写下对应的尺寸。

Android-目前最稳定和高效的UI适配方案(1),Android程序员,android,ui

而这种diemns引用,在不同的values-swdp文件夹下的数值是不同的,比如values-sw360dp和values-sw400dp,

Android-目前最稳定和高效的UI适配方案(1),Android程序员,android,ui

Android-目前最稳定和高效的UI适配方案(1),Android程序员,android,ui

当系统识别到手机的smallestWidth值时,就会自动去寻找和目标数据最近的资源文件的尺寸。

其次,从稳定性上,它也优于上述方案。原生的dp适配可能会碰到Pixel 2这种有些特别的手机需要单独适配,但是在smallestWidth适配中,通过计算Pixel 2手机的的smallestWidth的值是411,我们只需要生成一个values-sw411dp(或者取整生成values-sw410dp也没问题)就能解决问题。

smallestWidth的适配机制由系统保证,我们只需要针对这套规则生成对应的资源文件即可,不会出现什么难以解决的问题,也根本不会影响我们的业务逻辑代码,而且只要我们生成的资源文件分布合理,,即使对应的smallestWidth值没有找到完全对应的资源文件,它也能向下兼容,寻找最接近的资源文件。

当然,smallestWidth适配方案有一个小问题,那就是它是在Android 3.2 以后引入的,Google的本意是用它来适配平板的布局文件(但是实际上显然用于diemns适配的效果更好),不过目前所有的项目应该最低支持版本应该都是4.0了(糗事百科这么老的项目最低都是4.0哦),所以,这问题其实也不重要了。

还有一个缺陷我忘了提,那就是多个dimens文件可能导致apk变大,这是事实,根据生成的dimens文件的覆盖范围和尺寸范围,apk可能会增大300kb-800kb左右,目前糗百的dimens文件大小是406kb,我认为这是可以接受的。

今日头条适配方案

文章链接,之前确实没有接触过,我简单看了一遍,可以说,这也是相对比较完美的方案,我先简单说一下这个方案的思路,它是通过修改density值,强行把所有不同尺寸分辨率的手机的宽度dp值改成一个统一的值,这样就解决了所有的适配问题。

比如,设计稿宽度是360px,那么开发这边就会把目标dp值设为360dp,在不同的设备中,动态修改density值,从而保证(手机像素宽度)px/density这个值始终是360dp,这样的话,就能保证UI在不同的设备上表现一致了。

这个方案侵入性很低,而且也没有涉及私有API,应该也是极不错的方案,我暂时也想不到强行修改density是否会有其他影响,既然有今日头条的大厂在用,稳定性应当是有保证的。

但是根据我的观察,这套方案对老项目是不太友好的,因为修改了系统的density值之后,整个布局的实际尺寸都会发生改变,如果想要在老项目文件中使用,恐怕整个布局文件中的尺寸都可能要重新按照设计稿修改一遍才行。因此,如果你是在维护或者改造老项目,使用这套方案就要三思了。

关于一些问题

Q: 该适配方案怎么用?

A:点击进入上文的github项目,下载到本地,然后运行该Java工程,会在本地根目录下生成相应的文件,如果需要生成更多尺寸,在DimenTypes 文件中填写你需要的尺寸即可。

Q: 是否有推荐的尺寸?

A 300,320,360,411,450,这几个尺寸是比较必要的,然后在其中插入一些其他的尺寸即可,如果不放心,可以在300-450之间,以10为步长生成十几个文件。

Q:平板适配的问题?

A: 这个可以分成两个问题,第一,团队有没有专门针对平板设计UI?第二,才是如何对平板适配。如果团队内部没有针对平板设计UI,那么大家对于App在平板上运行的要求大抵也就是不要太难看即可。针对这种情况的适配方法是被动适配,即不要生成480以上的适配文件,这样在平板上,系统就会使用480这个尺寸的dimens文件,这样效果比主动适配更好;而如果团队主动设计了平板的UI,那么我们就需要主动生成平板的适配文件,大概在600-800之间,关键尺寸是640,768。然后按照UI设计的图来写即可。

Q:用了这套方案是否就不需要使用wrap_content等来布局了?

A:这是绝对错误的做法!如果UI设计上明显更适合使用wrap_content,match_parent,layout_weight等,我们就要毫不犹豫的使用,而且在高这个维度上,我们要依照情况设计为可滑动的方式,或者match_parent,尽量不要写死。总之,所有的适配方案都不是用来取代match_parent,wrap_content的,而是用来完善他们的

后记

糗百app几天内会发布11.2.0的UI全新改版的新版本,里面就大范围用到了sw适配,到时候大家可以用各种Android手机试用,看看适配效果,如果哪里适配有问题可评论留言。

好了,文章到这里就结束了,如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!

转发+点赞+关注,第一时间获取最新知识点

Android架构师之路很漫长,一起共勉吧!

以下墙裂推荐阅读!!!
  • Android学习笔记参考(敲黑板!!)
  • “寒冬未过”,阿里P9架构分享Android必备技术点,让你offer拿到手软!
  • 毕业3年,我是如何从年薪10W的拖拽工程师成为30W资深Android开发者!
  • 腾讯T3大牛带你了解 2019 Android开发趋势及必备技术点!
  • 八年Android开发,从码农到架构师分享我的技术成长之路,共勉!

如果你觉得还算有用的话,不妨把它们推荐给你的朋友~

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
Android-目前最稳定和高效的UI适配方案(1),Android程序员,android,ui
Android-目前最稳定和高效的UI适配方案(1),Android程序员,android,ui
Android-目前最稳定和高效的UI适配方案(1),Android程序员,android,ui
Android-目前最稳定和高效的UI适配方案(1),Android程序员,android,ui

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
Android-目前最稳定和高效的UI适配方案(1),Android程序员,android,ui

总结

【Android 详细知识点思维脑图(技能树)】

Android-目前最稳定和高效的UI适配方案(1),Android程序员,android,ui

我个人是做Android开发,已经有十来年了,目前在某创业公司任职CTO兼系统架构师。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

Android-目前最稳定和高效的UI适配方案(1),Android程序员,android,ui

详细整理在GitHub可以见;

Android架构视频+BAT面试专题PDF+学习笔记

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

学习笔记](https://bbs.csdn.net/topics/618156601)**

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

最后,赠与大家一句话,共勉!文章来源地址https://www.toymoban.com/news/detail-841054.html

到了这里,关于Android-目前最稳定和高效的UI适配方案(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenGL 学习系列--基础的绘制流程,目前最稳定和高效的UI适配方案

    void main() { gl_FragColor = u_Color; } 其中, gl_FragColor 变量就是 OpenGL 最终渲染出来的颜色的全局变量,而 u_Color 就是我们定义的变量,通过在 Java 层绑定到 u_Color 变量并给它赋值,就会传递到 Native 层的 gl_FragColor 中。 而第一行的 mediump 指的就是片段着色器的精度了,有三种可选,

    2024年04月08日
    浏览(44)
  • GitHub标星7-5K!Android-超级稳定且高效的UI适配方案【建议收藏】(1)

    图一是1080P,480dpi的手机,图二是1080P,420dpi的手机 从上面的布局中可以看到,同样是1080P的手机,差异是比较明显的。在这种情况下,我们的UI可能需要做一些微调甚至单独适配。 第二个问题,这种方式无法快速高效的把设计师的设计稿实现到布局代码中,通过dp直接适配,我

    2024年04月10日
    浏览(52)
  • ChatGPT 目前到底能帮助我们程序员做什么?

    🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞👍🏻 收藏 📂加关注 今天来简单说两句我自己的对 ChatGPT 的看法! 作为一个程序员有时候你真要多学会

    2024年02月01日
    浏览(60)
  • 30岁才转行程序员,目前34了,谈一下我的经历和一些感受吧...

    最近刷某乎,发现有很多朋友有年龄焦虑了,比如:“ 我今年28了转行来不来得及”,“我今年30了还能转软件测试吗?”...... 这种问题在知乎上有很多,仿佛大家都觉得年纪大了,很多事情都来不及了,我来说说我的经历吧,希望可以帮助到迷茫中的你! 先说下我基本情况

    2024年02月06日
    浏览(54)
  • uniapp自定义全局loading组件(目前只适配微信小程序)

    1.首先在项目根目录创建vue.config.js文件代码如下; 2.main.js添加这段代码替换uniapp全局loading方法并且全局挂载组件 3.添加loading组件通过vuex控制组件loading状态

    2024年02月06日
    浏览(51)
  • Unity - UI适配方案记录

    1.背景图 界面背景图建议至少宽于21:9;其中16:9的范围为精细范围,12:9的范围为真机最小可见范围。 2.组件 各组件通过设置RectTransform属性来达到正确适配的效果。 3.预览 在unity中,设置Game窗口左上角的分辨率即可预览效果。注意:最终效果需以真机测试为准。 在所有需要缩

    2024年02月06日
    浏览(48)
  • python目前哪个版本最稳定,python什么版本比较稳定

    大家好,本文将围绕python目前哪个版本最稳定展开说明,python什么版本比较稳定是一个很多人都想弄明白的事情,想搞清楚python哪个版本好用2020需要先了解以下几个事情。 大家好,小编来为大家解答以下问题,python安装哪个版本比较好,python一般安装哪个版本,现在让我们

    2024年01月25日
    浏览(42)
  • 程序员的“灵魂笔记本“:五款高效笔记软件推荐

    大家好,我是 jonssonyan。作为一名程序员,我们经常需要记录和整理大量的代码、知识和项目信息,以便在日后能够高效地进行查阅和复用。而好用的笔记软件则成为了我们的\\\"灵魂笔记本\\\",帮助我们提高工作效率。在这篇文章中,我将为大家推荐四款高效的程序员笔记软件,

    2023年04月15日
    浏览(68)
  • Android之屏幕适配方案

    在说明适配方案之前,我们需要对如下几个概念有所了解:屏幕尺寸,屏幕分辨率,屏幕像素密度。 屏幕尺寸 屏幕尺寸指屏幕的对角线的物理长度,单位是英寸,1英寸=2.54厘米。 比如常见的屏幕尺寸:5.0、5.99、6.0等等 屏幕分辨率 屏幕分辨率是指手机在横向、纵向上的像素

    2024年02月03日
    浏览(48)
  • 【Unity小技巧】最简单的UI设置适配方案

    这期来讲一个简单的UI设计方案,很多同学可能搞不懂锚点、轴心这些概念,导致做好的UI在别人的设备上,乱跑或者是重叠,或者是参加游戏老发时间比较紧来不及做适配,都可以来试试这个方法,通过填充边框来保持游戏画面的原始比例,所以它的缺点也很明显,在一些移

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包