前言

Android的适配是Android开发中的重要一环。一个良好的适配关乎着我们的用户体验,一直Android适配就是我们Android开发者所苦恼的事,也是需要重视的一件事。下面我就整理了一下有关适配的一些知识点。


概念

px: 像素,构成图像的最小单位。

dpi: 屏幕像素密度,也就是屏幕1英寸长度上的像素点的个数,1英寸约等于2.54厘米。与屏幕尺寸和分辨率有关。具体计算公式为:

假设,屏幕尺寸:5英寸, 分辨率为 1280x720 , 那么屏幕像素密度就等于1280的平方加上720的平方的和开根再除以5,即为294dpi。

dp,dip: 密度无关像素。说明下:

在160dpi的屏幕上,1dp = 1px。 如果我们在宽160dpi的屏幕上画一条长160px(160dp)的横线,则刚好填满宽。

如果在宽240dpi的屏幕上,我们画一条160dp的横线是否能够填满呢?答案是肯定的。因为在240dpi的屏幕上,1dp=240/160px,即1dp=1.5px。那么160dp=240px。刚好填满。

所以称之为密度无关像素。

sp: 可以根据文字大小首选项进行放缩,相信看过TextView的源码的朋友都知道,里面的长度单位也是sp,因为这是google推荐的字体大小单位。另外推荐使用12sp,14sp,18sp,22sp。不要小于12sp,以免用户看不清,也不要使用奇数或是小数,在放缩时有可能造成精度丢失。


布局

我相信,大家不会再使用绝对布局吧,这个布局已经违背适配的规范,所以不要使用。那么我们就尽量使用线性布局和相对布局,在使用线性布局时,使用weight属性进行分配,关于weight,在文章后面会对其进行详解。


图片文件夹

相信不少朋友也看到我们的Android项目res目录下有以下几个文件夹

google为我们创建的意义何在,也就是让我们将不同分辨率的图片放入不同的文件夹里。每个文件夹所对应的屏幕像素密度为:

mdpi :120dpi-160dpi
hdpi :160dpi-240dpi
xdpi :240dpi-320dpi
xxdpi :320dpi-480dpi
xxxdpi :480dpi-640dpi

也就是系统会根据屏幕dpi的不同,到对应的文件夹里去使用对应的图片。我们从自动创建的应用图标也可以发现hdpi-xxxdpi文件夹里的图标大小依次为:48x48px,72x72px,96x96px,144x144px,192x192px。

也就是我们在设计图标遵循2:3:4:6:8的比例来设计就对了。

相信大家已经发现,为什么没有ldpi呢?因为ldpi这种设备已经太少了,它的屏幕像素密度太低。不过如果遇到,那么也不用担心。系统会自动将Hdpi里的缩放至1/2进行适配。


weight

weight,这个属性,我们再熟悉不过,那么它的具体计算方法是怎样的?你是否知道weightSum这个属性?

好吧,下面我们一一揭晓,让我们看看下面的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Button
        android:text="Button1"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content" /><Button
        android:text="Button2"android:layout_width="0dp"android:layout_weight="2"android:layout_height="wrap_content" />
</LinearLayout>

相信大家已经知道显示结果了,我就直接贴出来:

那如果我将代码改成这种,将如何显示呢?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Button
        android:text="Button1"android:layout_width="match_parent"android:layout_weight="1"android:layout_height="wrap_content" /><Button
        android:text="Button2"android:layout_width="match_parent"android:layout_weight="2"android:layout_height="wrap_content" />
</LinearLayout>

相信有些小伙伴已经猜到了,

这里我就直接贴出公式了(以宽度为例),不明白的动动手。

weight 计算出的宽度=原有宽度+剩余空间所占百分比宽度

如果我只有一个控件,我想要它的宽度占屏幕宽度的一半,怎么办?当然我们可以通过获取屏幕宽度然后动态设置。不过,这里有个更简便的方法,那就是weightSum,看了下面的代码你就懂了。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:weightSum="2"><Button
        android:text="Button"android:layout_width="0"android:layout_weight="1"android:layout_height="wrap_content" />
</LinearLayout>

深入Android适配

这里就直接贴出大神的几篇blog:
Android 屏幕适配方案
Android 百分比布局库(percent-support-lib) 解析与扩展
Android 增强版百分比布局库 为了适配而扩展
Android AutoLayout全新的适配方式 堪称适配终结者

Android适配全攻略相关推荐

  1. android如何适配,Android适配全攻略(学习笔记总结)

    Android适配全攻略(学习笔记总结) 一.为什么要进行屏幕适配 某厂商统计如下数据 2012年,支持Android的设备共有3997种 2013年,支持Android的设备共有11868种 201 ...

  2. Android 屏幕适配全攻略

    Android-屏幕适配全攻略 一.Android屏幕碎片化 由于 Android 系统的开发性,任何用户.开发者.OEM厂商.运营商都可以对 Android 进行定制,修改成他们想要的样子.各大厂商 ...

  3. Android屏幕适配全攻略

    Android屏幕适配全攻略(最权威的官方适配指导) 分类: Android开发 Android UI 2015-05-21 14:33  3269人阅读  评论(6)  收藏  举报 目录(?)[+ ...

  4. Andriod界面设计的分辨率和尺寸适配全攻略 转载

    Andriod界面设计的分辨率和尺寸适配全攻略 转载 2016年09月27日 17:45:56 第一.屏幕尺寸: 一般表示是手机的实际物理尺寸,屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.5 ...

  5. android studio gradle配置_Unity打包Android最全攻略(含完整流程及常见问题)

    洪流学堂,让你快人几步.你好,我是你的技术探路者郑洪智,你可以叫我大智. 最近写了很多AR教程,在收到的小伙伴的求助里面,超过80%都是Android打包的问题.这篇就把你Android打包问题统统搞 ...

  6. Android 刘海屏适配全攻略

    这里主要是介绍一下Android P中刘海屏的适配以及Android P之前的适配.为什么要分开呢?因为Android P之前官方还没提供API来进行适配,都是由各家厂商来提供适配方案的. 2.And ...

  7. Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。

    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...

  8. Android屏幕适配全攻略(最权威的官方适配指导) (转)

    招聘信息: Cocos2d-X 前端主程 [新浪微博]手机客户端iOS研发工程师 20k-40k iOS 开发工程师 iOS高级开发工程师(中国排名第一的企业级移动互联网云计算公司 和创科技 红圈营销 ...

  9. 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)

    来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ...

最新文章

  1. 【笔记】Automatic recognition of soybean leaf diseases using UAV images and deep convolutional neural ne
  2. getdevicecaps在哪个头文件里_一招定胜负,while (true) 和 for (;;) 到底哪个更快
  3. autotools入门笔记(二)——创建和使用静态库、动态库
  4. 实战!阿里神器 Seata 实现 TCC模式 解决分布式事务,真香!
  5. 离不开的微服务架构,脱不开的RPC细节(值得收藏)!!!
  6. 金融现金贷用户数据分析和用户画像
  7. java获取网页表单数据,转发与重定向,使用application统计访问次数
  8. Cocos Creator大厅+子游戏模式
  9. 连锁零售多门店收银系统源码
  10. simulink单位转换小迈步
  11. 某公司的雇员分为以下若干类: Employee:这是所有员工总的父类.属性:员工的姓名,员工的生日月份。 方法:getSalary(intmonth)
  12. 单个次序统计量的密度函数
  13. Java笔记 - 黑马程序员_04(枚举,异常,Collection,List,Set)
  14. Selenium元素定位神器工具谷歌浏览器插件-ChroPath介绍,安装与使用
  15. java文件批量下载打包成zip
  16. JS模拟Form表单提交
  17. relative会脱离文档流吗_position:absolute会使元素脱离文档流
  18. Nb iot php_电信NBIoT物联网平台完整测试流程整理
  19. C++排序算法利用EsayX实现过程可视化
  20. 普通大学,多年功能测试,3年进入小米,软件测试如何有效的学习?

热门文章

  1. 详解ArrayDeque
  2. 一文带你理解Java中自动装箱和拆箱
  3. “旧网站回收——以旧换新”活动引发换购热潮
  4. Pwnable.tw之BookWriter
  5. 【数据库】数据库四大特性ACID
  6. 百度分享插件使用经验
  7. Intel SGX Developer Reference 学习笔记(五)
  8. Netty框架入门(一)
  9. 以一次 Data Catalog 架构升级为例聊业务系统的性能优化
  10. Solidworks蓝屏问题