android 适配性完全攻略

概要-一路走过来的过程

  从2015年10月之前呢,都是走的dp单位+多组value文件的套路来适配的,这种老套路就不多说了,优点是稳定性强,只要是value文件涉及到的分辨率适配性都没的说,缺点也一目了然,那就是由于android机型的多样式,光要考虑到分辨率是不够的还要考虑密度,因为市场上总会存在一些奇葩机型,例如:分辨率是1920x1280,而密度不是该分辨率正常的xxhdpi可能是hdpi或mdpi,这种存在的原因是他可能是pad或比较不常规的尺寸。
  当然我们都不希望自己的软件在任意一个设备上变得扭曲不堪。于是乎下个项目我们便采取了官方百分比适配方案。原因有三:1是因为时代在发展我们要跟上脚步出来新东西自然要尝试。2是之前也正好有这种想法,浏览器可以做百分比安卓为何不能做呢。3是被分辨率和密度的多重组合虐的不行。于是便展开了新的尝试。刚开始测试的时候觉得便利太多了,能够舍弃掉大量的value文件,这为开发省去了不少的适配时间。但缺点就是UI妹子给的一般都是px的标注,而用百分比适配的话就需要每一个标注都换算一遍,还有listview列表的每一个item的高度还是需要设置dp大小,以及动态添加布局的这类都不支持。这又给项目的适配性添加了一些难度,还是要做一些value文件。
  那么第二个项目做完之后在第三个项目开展之前我又在寻觅好的适配方案,正巧有空研读一下hongyang大神的px适配方案,原理也是走的百分比适配,只不过给优化成px标注的形式,从这一点就可以再一次大大减小做页面时的工作量,不用去计算px占多少百分比了,而且在recyclerview以及listview中也有对应的适配性方案,这一点也很人性化。

适配基本概念

概念

dip|dp : Density independent pixels ,设备无关像素。
px : 像素
dpi :dots per inch , 直接来说就是一英寸多少个像素点。常见取值 120,160,240。像素密度
density : 密度。常见取值 1.5 , 1.0 。和标准dpi的比例(160px/inc)
分辨率 : 横纵2个方向的像素点的数量,常见取值 480X800 ,320X480
屏幕尺寸: 屏幕对角线的长度。

换算公式:px = (dpi /160) * dp

标准dpi

name value
ldpi 120
mdpi 160
hdpi 240
xhdpi 320
xxhdpi 440

设备规范

以模拟器为例

这里是5.1英寸的屏幕 480x800的mdpi 那么我们可以通过公式计算一下他真实的mdpi值
√(480² + 800²)/5.1 = 182
算出来是182 可见每个机型的dpi值不一定是标准值,所以android给厂商规定的也不是很严,是有一个范围的

上面的范围是机型尺寸的范围,分4种。small多用于手表的设备,normal多用于手机,large一般适用于pad,xlarge多用于电视,也有部分pad是xlarge尺寸。
下面的范围是dpi值得范围,也就是在区间内的都属于该dpi。

官方百分比适配方案

依赖方法

build.gradle中添加
compile ‘com.android.support:percent:22.2.0’

用法

<android.support.percent.PercentRelativeLayout                     xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/tv_course_detail_topic"android:layout_width="wrap_content"android:layout_height="0dp"app:layout_heightPercent="10%"android:gravity="center"android:textSize="@dimen/one_title"/><android.support.percent.PercentRelativeLayoutandroid:id="@+id/prl_course_detail_info"android:layout_width="0dp"android:layout_height="0dp"android:layout_below="@+id/tv_course_detail_topic"app:layout_marginTopPercent="3%"app:layout_widthPercent="100%"app:layout_heightPercent="30%"><ImageViewandroid:id="@+id/iv_course_detail_ad"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_widthPercent="40%"app:layout_heightPercent="100%"android:src="@drawable/video_detail_img"/></android.support.percent.PercentRelativeLayout>
</android.support.percent.PercentRelativeLayout>

从上面的例子上可以看得清楚:
1.引用android.support.percent.PercentRelativeLayout
这里支持百分比相对布局和百分比帧布局两种,并没有百分比线性布局
2.引用xmlns:app=”http://schemas.android.com/apk/res-auto”,这样就可以用app标签了
3.可以用app:layout_widthPercent=”100%”,app:layout_heightPercent=”30%”代替宽高属性,要注意几点:
(1).宽高属性不能不写,可以填充0dp代表没有用到。ps:只要后面有百分比宽高属性了填多少都无所谓
(2).这里指的百分比是指在当前父布局内的百分比,并不是整个屏幕
4.除了百分比宽高,还可以在margin上加百分比,用法app:layout_marginTopPercent=”3%”
5.百分比布局是可以实现布局嵌套的。只要外层还是百分比布局,里面的控件同样可以设置百分比属性,只不过百分比是针对当前父布局

优点

1.可以通过百分比省去在value文件上大量的dp值(这一点就足够去尝试他了)

缺点

1.由于美工妹子给的都是px标注,所以可想而知每一个控件间距大小都要换算啊换算,当然之前用dp也需要换算
2.由于百分比是针对父布局的,所以一涉及嵌套关系那就是百分比x百分比了,计算可想而知
3.每个手机都会有一个通知栏,这个大小是不固定的,所以屏幕父布局的高度总会少算一些。ps:如果是底下还有虚拟按键的机型那就出事故了
4.百分比布局高度并不适用于ListView,RecylerView的Item项,所以只能写dp值
5.字体值必须写sp值配多组value文件
6.在fragment中用include百分比布局无效

总结:很多地方还是需要设置dp值来给它擦屁股

百分比px适配方案

直观感受


UI妹子给的图能直接根据标注的px去写xml,真的不能再爽,不用再去算什么百分比了

用法

1.build.gradle中添加

dependencies {compile project(':autolayout')
}

2.在你的项目的AndroidManifest中注明你的设计稿的尺寸。

<meta-data android:name="design_width" android:value="768"></meta-data>
<meta-data android:name="design_height" android:value="1280"></meta-data>

3.让你的Activity去继承AutoLayoutActivity

优点

1.可以把px标注百分比化,针对不同分辨率的设备可以自动按照设置的px值计算实际数值,程序猿不用再做多余计算了
2.支持字体px设置,在value文件中又省了字体大小的一席之地
3.对ListView和RecyclerView有良好的支持,添加一句代码就搞定Item布局的依赖。

缺点

1.对第三方依赖库上还要做value文件去适配 ps:这个是无法避免的吧=.= 强行缺点

总结:所以到现在为止该库是体验最好的

http://blog.csdn.net/lmj623565791/article/details/49990941 详细说明我就不赘述直接参考Hongyang大神博客吧

关于项目布局优化(快速开发)的想法

drawable样式化

drawable文件夹中经常会用到selector、shape和ripple等样式,可以做出一个规范化样式并存放。方便每个项目去做的时候有一个快速参考

style样式化

同上,常用的TextView样式和EditText样式可以抽出规范式

常用Item模块样式化

常用的列表每一项中的样式可以进行规范化抽离

常用布局样式化

例如登录注册这种项目必经模块的布局必须走样式化

项目布局统一化,

每个项目中“我的模块”其实内容大体一致,可以和产品及美工进行沟通实现布局样式统一化的美好愿景

android 适配性完全攻略相关推荐

  1. Android 系统(265)----Android进程保活全攻略(上)

    Android进程保活全攻略(上) 对于每个公司的APP来说,当然都希望自己APP的进程尽量的不被杀死,于是乎,就有了一些列进程保活的方法出现,网上也有很多关于这类的文章,但网上很多资料往往只告诉了思 ...

  2. Android使用XML全攻略(1)

    Android使用XML全攻略(1) Android 是针对移动设备的一种新兴的开源操作系统和 SDK.借助它,您可以创建功能强大的移动应用程序.当您的应用程序可以访问 Web 服务时,其吸引力会大大 ...

  3. Android Studio打包全攻略----Gradle-Build Variants构建定制版App

    上一篇文章 Android Studio打包全攻略-从入门到精通限于篇幅Build Variants的作用分析得还不够,这篇文章主要探讨如何构建特别定制版App. 你肯定看到过这样的App,类似于:打 ...

  4. 『Android春招实习攻略』2022年中总结

    『Android春招实习攻略』2022年中总结 自我介绍: 23届毕业生,目前大三下在读,双非科班,经历了半年春招实习招聘 大学期间,属于普普通通学习型学生,间歇性踌躇满志,习惯性混吃等死. 绩点中上 ...

  5. Android屏幕适配;知识点+攻略+面试要点

    引子 屏幕适配是 android 开发/面试 绕不开的一个问题.本文 将屏幕适配的知识要点完整展现给各位读者. 正文大纲 android需要做屏幕适配的原因 基础知识点(很重要) 屏幕适配攻略 正文 ...

  6. Android 注解处理器使用攻略

    上一篇写了JavaPoet使用攻略,了解了JavaPoet用法.那么我们就可以结合今天的Annotation Processing Tool(APT)来自定义注解处理器. 注解处理器简单解释就是收集我 ...

  7. 计算机毕业设计android的云南旅游,美食攻略,产品预订app(源码+系统+mysql数据库+Lw文档)

    项目介绍 如今的社会,伴随着生产力的大大提高,人民的物质生活已经得到了极大的满足,但是精神上的匮乏与之俱增.阅读书籍,聆听音乐,增加运动等都不失为提升精神需求的好办法,但是就当下而言,来一场说走就走的 ...

  8. 打造一个高逼格的android开源项目——小白攻略

    小引子 在平时的开发过程中,我们经常会查阅很多的资料,最常参考的是 github 的开源项目.通常在项目的主页面能看到项目的简介和基本使用,并且时不时能看到页面汇中有好多的彩色标签,看起来很酷,很专业 ...

  9. 基于android的旅游指南,基于Android的旅游游记攻略系统设计与实现.zip

    摘要:及时的记录及分享自己游玩的心得感触对旅行爱好者来说是很重要的,以前都是在旅行结束之后再总结在旅途中的趣事,这样不够及时,想要完整的记录下在旅途中的趣事及感想就有点困难.同时,不同的用户有自己喜欢 ...

最新文章

  1. android debug database 源码解析
  2. JavaScript代码检验工具——JS Lint工具安装指南
  3. python压缩包怎么安装-详解python解压压缩包的五种方法
  4. (15)javaScript入门
  5. sql 字符串函数(一)
  6. seafile安装教程mysql密码_Seafile安装踩坑
  7. Kerberos策略的配置
  8. Cannot create a session after the response has been committed
  9. php think cmf,thinkphp cmf代码
  10. Intel官宣开发RISC-V处理器:明年首发7nm工艺
  11. java创建对象的几种方式
  12. Python基础(8)素数输出
  13. 国际化标签 fmt:bundlefmt:message的使用
  14. HBase region的split过程浅析
  15. 安装qt qmake 错误:could not find a Qt installation of ''
  16. 你还不知道高情商表现怎么表现?
  17. 【redis】Redis中的队列list实现秒杀活动抢购
  18. Datagrid striped 不工作?
  19. 连线杂志:盖茨53年人生大事记
  20. CLOUD 云计算进阶(一)-云平台搭建与虚拟化服务

热门文章

  1. 计算机主机板的各种接口安装,计算机主板上的插座或接口有哪些
  2. C语言---单链表(详解)---数据结构
  3. 稳定的货源社区源码分享
  4. Twitter 宣布抛弃 Mesos,转向 Kubernetes;全球关键5G专利我国占34%;华为面试要改革?...
  5. idea工具栏没有vcs被替换成git
  6. Rust嵌入式编程---动态内存分配器(Vec,String等)
  7. 自动控制原理(机电)_简要复习_笔记
  8. unity2d开发工具包_2D游戏工具包简介:通过拖放学习Unity
  9. 常用U-boot命令详解
  10. 冒险岛服务器租用需要考虑哪些因素?