超级苦工
阅读 28
Android屏幕适配的总结

屏幕适配的核心:其一,就是适配的效率,即把设计图转化为App界面的过程是否高效,其二如何保证实现UI界面在不同尺寸和分辨率的手机中UI的一致性。

背景知识:

dp的优点,相同dp的控件,能够保证不同屏幕上的实际物理大小相同
缺点:
1、由于屏幕尺寸不一样,对于同样dp的控件,有的屏幕放不下,有的屏幕有留白
2、为了便于统一适配,对于某个区间内的dpi,系统会统一视为某个dpi来使用,比如几部相同分辨率不同尺寸的手机的ppi(屏幕中ppi值等于dpi)可能分别是是430,440,450,那么在Android系统中,可能dpi会全部指定为480,这样的话,dpi/160就会是一个相对固定的数值,但这样就会将实际显示尺寸和清晰度有细微差别。

根据上述缺陷,需要更优秀的屏幕适配方案
1、使用宽高限定符,即穷举市场上的手机宽高分辨率,如values-1920x1080,优点是精确,缺点也是如此,必须要精确匹配,否则只能用默认的宽高dimens;
2、使用最小宽度(或最小高度)限定符,如values-sw360dp,和前一方案原理一致,优点是容错率较高,如果不能精确匹配,系统能往下寻找最接近的资源文件,
两个方法的弊端都是会增大apk体积,dimens文件的体积增大量一般不超过1m,如果算上不同分辨率的图片资源就会增大较多
3、今日头条屏幕适配方案,如果设计稿是360dp宽度,动态设置手机的destiny使其在不同设备上始终保持宽度px/destiny = 360dp,这样就能保证不同屏幕上UI的一致性。
缺陷就是对老项目维护不友好,因为这样会把整个布局尺寸都改动,老项目可能是写死dp或按照最小宽度区分values适配的,需要做较多改动。

经验小提示

  • 限定宽度,高度用match-parent,或者采用滑动方式
  • 百分比布局、weight、ConstraintLayout都是可选工具
AndroidAutoSize 使用经验
  • jessyan是否会对三方库页面产生影响 会
  • 三方库的引用方式中本地引用是否和远程引用等效 是
  • 验证引用jessyan时候项目会不会根据屏幕尺寸选择不同的dimens 会
    核心功能,只要按照设计图写(设计图以dp为单位),然后适配,设置好高度或宽度的基准,就能适配大部分的屏幕(从基准轴根据不同屏幕比例缩放,最大程度接近设计稿效果),基本不需要多个dimens。
    公司音乐模块区分dimens的原因是hls和cat的设计稿都不一样,两个软件的基准值也不一样,所以要区分。

具体方案参考

Android 目前稳定高效的UI适配方案

今日头条屏幕适配方案

关注下面的标签,发现更多相似文章
评论
相关推荐
Android 使用 HTTPS

来源: 简书 原文: Android 使用 HTTPS 如果你的项目的网络框架是okhttp,那么使用https还是挺简单的,因为okhttp默认支持HTTPS。传送门 Android 使用 HTTP...

Android 适配一篇就够 - 编译版本?support?API 兼容?图片适配?

来源: 简书 原文: Android 适配一篇就够 - 编译版本?support?API 兼容?图片适配? 本文介绍 Android 不同系统及图片资源的常见适配问题。 compileSdkVersi...

[Kotlin Tutorials 11] Kotlin和Java的双向互操作

来源: 简书 原文: [Kotlin Tutorials 11] Kotlin和Java的双向互操作 Kotlin和Java的双向互操作 Kotlin和Java是有互操作性的(Interoperabi...

Android跳转到获取应用通知权限

来源: 简书 原文: Android跳转到获取应用通知权限 1.判断是否有通知权限 官方只最低支持到API 19(4.4),低于19的只会返回true,目前暂时没有办法获取19以下的系统是否开启了某个...

Android--PathMeasure基本用法

来源: 简书 原文: Android--PathMeasure基本用法 PathMeasure是一个用来测量Path的类 构造方法 //创建一个空的PathMeasure public PathMea...

Android屏幕适配的总结

来源: 简书 原文: Android屏幕适配的总结 屏幕适配的核心:其一,就是适配的效率,即把设计图转化为App界面的过程是否高效,其二如何保证实现UI界面在不同尺寸和分辨率的手机中UI的一致性。 背...

Android热修复之-Frameworks层修复原理分析

来源: 简书 原文: Android热修复之-Frameworks层修复原理分析 说到热修复主要有两种修复方案一种是通过dex替换的方式来达到修复效果、一种是基本native层的修复。dex替换的方式...

[译文]MongoDB WiredTiger引擎调优技巧

来源: 简书 原文: [译文]MongoDB WiredTiger引擎调优技巧 MongoDB从3.0开始引入可插拔存储引擎的概念。当前,有不少存储引擎可供选择:MMAPV1、WiredTiger、M...

知道了这些 MongoDB设计技巧,提升效率50%

来源: 掘金 原文: 知道了这些 MongoDB设计技巧,提升效率50% 范式化设计还是反范式 考虑下这样的场景,我们的订单数据是这样的 商品: { "_id": productI...

Mongo实时聚合千万文档数据

来源: 掘金 原文: Mongo实时聚合千万文档数据 1.前言 大数据的聚合分析在企业中非常有用,有过大数据开发经验的人都知道ES、Mongo都提供了专门的聚合方案来解决这个问题。但是大量数据的实时聚...

历时七天,史上最强MySQL优化总结,从此优化So Easy!

来源: 掘金 原文: 历时七天,史上最强MySQL优化总结,从此优化So Easy! 一、概述 1. 为什么要优化 一个应用吞吐量瓶颈往往出现在数据库的处理速度上 随着应用程序的使用,数据库数据逐渐增...

Mysql 百问系列:B+Tree 到底是什么

来源: 掘金 原文: Mysql 百问系列:B+Tree 到底是什么 前言: 以前看过许多关于B+ Tree的文章,当时看了总觉得明白了,可是没过多久就又要忘了。直到我看了掘金小册:Mysql是怎么运...

LRU算法及其优化策略——Mysql篇

来源: 掘金 原文: LRU算法及其优化策略——Mysql篇 在上一篇文章中,介绍了LRU算法在Redis之中的应用,本篇继续给各位道友介绍在Mysql的InnobDB引擎中,是如何使用LRU算法的。...

mysql order by 优化

来源: 掘金 原文: mysql order by 优化 version : 5.7, from 8.2.1.14 ORDER BY Optimization 本节描述MySQL何时可以使用索引来满足...

MYSQL-多表查询

来源: 掘金 原文: MYSQL-多表查询 首先创建数据表tb_departments create table tb_departments (dept_id INT PRIMARY KEY, de...

MySQL索引和SQL调优

来源: 掘金 原文: MySQL索引和SQL调优 [TOC] MySQL索引和SQL调优 本文有参考网上其他相关文章,本文最后有附参考的链接 MySQL索引 MySQL支持诸多存储引擎,而各种存储引擎...

iOS 底层拾遗:AutoreleasePool

来源: 掘金 原文: iOS 底层拾遗:AutoreleasePool 前言 在阳神的 黑幕背后的Autorelease 文章中已经把 AutoreleasePool 核心逻辑讲明白了,不过多是结论性...

iOS app秒开H5优化探索

来源: 掘金 原文: iOS app秒开H5优化探索 背景 为了快递迭代、更新,公司app有一大模块功能使用H5实现,但是体验比原生差,这就衍生了如何提高H5加载速度,优化体验的问题。此文,记录一下自...

iOS常用宏 定义

来源: 简书 原文: iOS常用宏 定义 iOS开发过程中,使用的一些常用宏定义 字符串是否为空 #define kStringIsEmpty(str) ([str isKindOfClass:[NS...

比较一下iOS中的三种定时器

来源: 掘金 原文: 比较一下iOS中的三种定时器 NSTimer NSTimer是iOS开发中的最常见的定时器。 Timers work in conjunction with run loops....