前言

手机的屏幕适配一直是非常麻烦的,现在我就以做笔记的方式来简单梳理下

单位理解

首先让我们先来看看关于手机所用到的单位

真实物理尺寸单位:

mm:表示毫米,是屏幕的物理尺寸。

in:表示英寸,是屏幕的物理尺寸。每英寸等于2.54厘米。例如,形容手机屏幕大小,经常说,3.2(英)寸、3.5(英)寸、4(英)寸就是指这个单位。这些尺寸是屏幕的对角线长度。如果手机的屏幕是3.2英寸,表示手机的屏幕(可视区域)对角线长度是3.2*2.54 = 8.128厘米.

pt:表示一个点,是屏幕的真实物理尺寸,常用于印刷。大小为1英寸的1/72. 在Photoshop 上, 默认设置是72像素/英寸, 所以在这种情况下,1pt = 1px

抽象单位

px:表示屏幕实际的象素, 就是屏幕上一个一个的点,例如,320*480的屏幕在横向有320个象素,在纵向有480个象素;像素并不能表示真实的尺寸,一个像素点尺寸有可能很大(例如在投影仪的屏幕上),也有可能很小(如在手机上)。所以在尺寸不变的情况下分辨率越高的的手机像素点尺寸越小。

dip:逻辑长度单位,也写作dp, 他两都是一个意思。它Android 自己抽象出来的单它与像素无关,与屏幕密度(下面解释)无关,但是会根据屏幕的密度(density(一英尺标准160个点))进行缩放。在 160 dpi 屏幕上,1dp=1px=1/160英寸,随着密度变化,对应的像素数量也变化,但并没有直接的变化比例

dp:同dip,是其简写。

densityDpi: 屏幕密度,对应于PC领域的DPI, 也就是一英寸里有多少个像素。标准的是160, 所以在density=160时,1dp = 1px, density=240时, 1dp = (240/160) px = 1.5px.

density:上面的比例因子1.5 就是density

sp:这个用于Android 的字体大小,sp除了与密度无关外,还与scale无关,其实跟pt的含义也是类似的,也是可以表达真实的物理尺寸,只是它适用在手机上,指的是标准情况(density=160)下一个“点”的大小。 (160sp)  = (一英尺) = (72pt) 所以  1sp = (72/160)pt

注意:如果屏幕密度为160,1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。那么原来TextView的宽度设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但如果设置成160dp或160sp的话。系统会自动将width属性值设置成320px的。也就是160 * 320 / 160。其中320 / 160可称为密度比例因子。也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换。

简单认识

练习布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="50mm"
android:layout_height="50mm"
android:background="#789789"
android:gravity="center" />
</LinearLayout>

在4英寸(480 X 800)手机上面运行的时候效果图(左)              6英寸(1440 x 2560)(右)

                               

从效果图上可以看出他们与手机的具体尺寸有关

注意:同理通过实验可以得知当单位为 mm、in、pt的时候,都是具体的物理尺寸,在不同的手机上面大小一样,有多余就会超出屏幕,不会缩放,与像素密度无关。

当设置单位为 px的时候

<TextView
android:layout_width="400px"
android:layout_height="400px"
android:background="#789789"
android:gravity="center" />

在4英寸(480 X 800)手机上面运行的时候效果图(左)              6英寸(1440 x 2560)(右)

                   

 

可以看出宽度和手机的横向像素(我们常说的分辨率)有关  1px = 1个像素

 

<TextView

android:layout_width="300dp"

android:layout_height="300px"

android:background="#789789"

android:gravity="center" />

在4英寸(480 X 800)手机上面运行的时候效果图(左)              6英寸(1440 x 2560)(右)

    

可以看出 android系统对 dp单位进行了缩放,简单的说像素(分辨率)越大,1dp 所拥有的像素就越多,我们可以把屏幕密度  density=160 当成一个android内部转换基准

综上所述:在屏幕适配的时候尽量使用dp作为单身。

Android 屏幕适配的更多相关文章

  1. Android屏幕适配全攻略 (转载)

    http://blog.csdn.net/jdsjlzx/article/details/45891551 https://github.com/hongyangAndroid/AndroidAuto ...

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

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

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

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

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

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

  5. 腾讯优测| 让Android屏幕适配开发更简单-Google百分比布

    文/腾讯优测工程师 吴宇焕 腾讯优测优社区干货精选~ 相信开发同学都被安卓设备碎片化的问题折磨过,市面上安卓手机的主流屏幕尺寸种类繁多,给适配造成很大的困难.就算搞定了屏幕尺寸问题,各种分辨率又让人眼 ...

  6. Android 屏幕适配(一)百分比布局库(percent-support-lib) 解析与扩展

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/46695347: 本文出自:[张鸿洋的博客] 一.概述 周末游戏打得过猛,于是周 ...

  7. Android重写getResources规避用户调整系统字体大小影响Android屏幕适配

    Android屏幕适配一直是一个头疼的问题.除此之外还要考虑APP在实际应用场景中,用户千奇百怪的设置,最常见的用户设置行为就是设置手机的字体大小,比如把字体设置成超大或者超小,这对屏幕适配又带来额外 ...

  8. (转)android屏幕适配

    声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息 原文作者: zhuangyujia 原文地址: http://my.eoe.cn/zhuangyujia/archiv ...

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

    原文网址:http://blog.csdn.net/jdsjlzx/article/details/45891551 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的 ...

  10. Android开发——自动生成Android屏幕适配的dimens.xml文件

    使用dimens.xml解决屏幕适配问题是Android官方解决方案,本文主要讲述了如何自动生成Android屏幕适配的dimens.xml,减少了工作量,在维护dimens.xml文件时更加省时省力 ...

随机推荐

  1. python安装第三方类库的方法

    1.先到官网 http://pypi.python.org/pypi/setuptools 下载setuptools.exe文件并安装 点击 ez_setup.py进入, 并将内容复制下来, 保存为本 ...

  2. BZOJ2471 : Count

    考虑KMP,设$f[i][j][S]$表示还剩最低$i$位没有确定,目前KMP匹配到了$j$这个位置,前缀匹配情况是$S$,最终会匹配到哪里,中途匹配成功几次. 其中$S[i]$是一个pair< ...

  3. tornado 学习笔记10 Web应用中模板(Template)的工作流程分析

             第8,9节中,我们分析Tornado模板系统的语法.使用以及源代码中涉及到的相关类,而且对相关的源代码进行了分析.那么,在一个真正的Web应用程序中,模板到底是怎样使用?怎样被渲染? ...

  4. javascript创建跟随鼠标好玩的东西

    不说话,直接上代码. css: #createGoDivBox{ display: none; } #createGoDivBox div{ background-color: #00A6C2; po ...

  5. centos 安装 opencv-3.1.0

    官方安装教程 http://docs.opencv.org/3.1.0/d9/d52/tutorial_java_dev_intro.html#gsc.tab=0 注意要先安装jdk和apache a ...

  6. jQuery文本段落展开和折叠效果

    <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/h ...

  7. 推荐轻量高效无依赖的开源JS插件和库

    目录 图片 布局 音频视频 编辑器 轮播图 弹出层 表单 存储 动画 时间 其它 CDN 图片 baguetteBox.js - 是一个简单易用的响应式图像灯箱效果脚本.demo Lightgalle ...

  8. jsp 页面标签 积累

    http://www.cnblogs.com/xiadongqing/p/5232592.html <%@ taglib %>引入标签库 ========================= ...

  9. JQ第三天//基本纯代码

    一.让图片飞 代码:<script type="text/javascript">        $(function () {            $(docume ...

  10. FMDB简单封装和使用

    工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...