(转)android屏幕适配

本文转自:http://isux.tencent.com/learn-android-from-zero-session6.html

一,Android的度量单位

在Android中,定义组件尺寸的单位通常有dp和sp,那么它们跟我们经常使用的px有什么区别呢?

  • px

px是Pixels的缩写,是常用的像素单位,对应的是屏幕上的点。
移动设备的尺寸有很多种,它们的屏幕总像素也是不同的,使用px单位的组件尺寸会有不一致的情况。

我们看个例子

可以看出这个加号icon在分辨率较高,尺寸较大的屏幕上反而显得略小

  • dip/dp

dp(density-independent pixel)是与密度无关的像素单位,也就是dip。它是基于设备屏幕物理密度的抽象单位。1dp 表示屏幕DPI为160时1px的长度。DPI 越高的屏幕,屏幕绘制1dp 需要越多的像素,反之亦然。

我们可以将上个例子的图片宽高设置为30dp

可以看出两个加号icon的尺寸是一致的

  • sp

sp(scale-independent pixel)是与缩放无关的像素单位。跟dp类似,唯一的不同是,该单位会受系统字体设置的影响,通常用在字体上。
Android在设计规范中规定了字体的常用大小:

使用dp/sp的好处是,无论屏幕DPI如何,组件总能表现一致。

二,Android的布局

在Android开发,为程序定义用户界面布局有以下方法:

  • 在XML 文件定义
  • 在程序代码中实例化布局
  • 使用图形布局工具

以上三种方法各有利弊,我们会根据需求场景来应用不同的布局方式,这里主要讲XML布局。

在XML文件定义组件,可以方便的管理程序的UI部分,并且分离表现和行为,使得代码容易管理阅读和管理,而且可以为不同的屏幕定制XML文件。
常用的布局有Frame Layout , Linear Layout , Relative Layout , List View 和 Grid View。
由于List View 和 Grid View 涉及数据部分,我们放到后面再讲,先从几个简单的开始  :)

Frame Layout

FrameLayout是最简单的布局,添加到这个布局的元素都是层叠的,当前元素会被下一个元素覆盖,相当于CSS中的绝对定位position:absolute。

从 Summary 的 XML Attributes 中可以知道这些属性的信息概要。

几个常用的属性:

  1. android:foreground  设置布局的前景图,前景图不会被子元素覆盖
  2. android:foregroundGravity 设置布局前景图的位置

对于FrameLayout.LayoutParams,这里仅有android:layout_gravity属性,可以查看前面文章
http://isux.tencent.com/learn-android-from-zero-session3.html

我们可以实践一下:
新建一个Android项目,然后在layout文件夹找到布局xml文件并写入以下布局

运行效果如下:

更多详细信息可以查看谷歌大神文档:
http://developer.android.com/reference/android/widget/FrameLayout.html

Linear Layout

线性布局在前面有所讲解,小伙伴们可以看这篇文章http://isux.tencent.com/learn-android-from-zero-session3.html

Relative Layout

相对布局可以指定元素的位置。元素的位置可定义为相邻元素的相对位置(例如元素A在元素B的左侧),也可以定义为父元素的相对位置(例如在父元素的中间或者左侧)。
使用相对布局可以方便的控制元素的位置。在没有定义时,所有的元素都是在父元素的左上方。

从 Summary 的 XML Attributes 中可以知道这些属性的信息概要。

几个常用的属性:

  1. android:gravity 设置其内容(文字、视图)在该元素内的位置
  2. android:ignoreGravity  设置元素的ID使其不受gravity属性的影响

在 RelativeLayout.LayoutParams,有两类属性,一类是子元素在父元素的对齐方式,另一类是子元素相对其他元素的位置

下面是第一类属性的示意图

对于第二类属性,我们实践一下:
新建一个Android项目,然后在layout文件夹找到布局xml文件并写入以下布局

然后在values文件夹找到string.xml并增加以下代码

运行效果如下:

更多详细信息可以查看谷歌大神文档:
http://developer.android.com/reference/android/widget/RelativeLayout.html

三,Android的屏幕适配

1.屏幕相关概念

下面介绍几个常见的名词

  • 屏幕大小

通过查阅设备信息可以知道设备的物理尺寸,也可以通过计算屏幕对角线的长度得到。
在Android的设计规范中,把屏幕分成了4类:Small,Normal,Large,Extra Large

  • 屏幕密度

屏幕在物理尺寸范围内的像素数量。也通常指DPI(dots per inch)。屏幕密度越小,所包含的像素也就越少。
在Android的设计规范中,把屏幕密度划分为4类:Low,Medium,High,Extra High。

  • 屏幕方向

屏幕方向有横向和纵向,这两种情况下的屏幕长宽比是不同的。

  • 分辨率

跟电脑分辨率的概念类似,表示屏幕横纵方向的像素数,例如480*800。
在为APP进行屏幕适配时,不能只考虑到像素,还有屏幕大小,屏幕密度等等。

  • DPI

dots per inch,就是每英寸多少像素,通过下面公式可以得到。
DPI=(√(横向分辨率^2+纵向分辨率^2))/屏幕尺寸

在Android的设计规范中,DPI分成了5个档次:MDPI,HDPI,XHDPI,XXHDPI,XXXHDPI,它们的比例是 2:3:4:6:8

可以看一下不同的尺寸单位在不同屏幕的情况:

XHDPI屏幕(~320DPI)

HDPI屏幕(~240DPI)

MDPI屏幕(~160DPI)

通过以上可以得出:

  • 在MDPI的屏幕(即160DPI),1dp 和1sp 基本等于 1px 。
  • dp 和 px的换算公式:px = dp*(DPI/160)。
  • sp 和 px的换算公式:px = sp*(DPI/160)。

2.为不同的屏幕大小提供布局

通常来说,Android通过缩放使得APP可以适应屏幕大小,但是对于一些特殊情况,我们可以提供更佳的布局使得体验更好。例如,在大屏幕设备,可以通过调整UI组件的位置和大小使屏幕的空间可以得到充分利用。对于小设备,就只需要调整UI组件的大小就行。

布局常用的大小有small,normal,large和x-large,可以根据需要选择布局的类型进行配置。
常用的布局配置如下:

  • res/layout/layout.xml
  • res/layout-small/layout.xml
  • res/layout-large/layout.xml
  • res/layout-large-land/layout.xml

3.为不同的屏幕密度提供图片

对于android来说,可以使用的图片类型有.png,.jpg,.gif以及.9.png(点九图)。APP会为不同的屏幕放大或者缩小图片。如果只为MDPI的设备提供了图片,那么对于HDPI的设备图片会放大,对于LDPI的设备图片会缩小。所以最好的方式是为不同的屏幕密度提供图片。

对于设计师来说,可以选择320DPI作为标准对APP进行设计,然后选择Photoshop/Illustrator这些工具,按照设备的比例,导出不同尺寸的图片。例如,为标准尺寸设备(XHDPI)设计的200×200按钮图,就需要为HDPI设备导出150×150的尺寸,为MDPI设备导出100×100的尺寸
然后将这些图片放到 res/ 中对应的文件夹,APP会根据设备的情况选取图片。
设置如下:

  • res/drawable-xhdpi/image.png
  • res/drawable-hdpi/image.png
  • res/drawable-mdpi/image.png

4,点九图

“点九”是一种特殊的PNG格式,可以对图片指定拉伸区域和内容区域。在SDK里面的 tools/文件夹就能找到制作这种图片的工具。

工具界面如下:

把图片拖拽到工具里面进行加点标记

在图片的左边(A区域左侧)和上边(B区域上方)进行标记,表示该区域可伸缩。
A区域:

B区域:

在图片的底边(c区域下方)和右边(D区域右侧)进行标记,表示该区域是内容。
C区域:

D区域:

标记完之后,文件在保存的时候会将改为.9.png格式。
使用时,在xml文件中设置android:background=”@drawable/button”。

关于点九的文章前面有同学介绍过:http://isux.tencent.com/android-ui-9-png.html
当然,如果你想偷懒的话,这里有个工具可以帮你点:)
http://romannurik.github.io/AndroidAssetStudio/nine-patches.html

四,总结

在做屏幕适配时,需要注意以下几个点:

  1. 在定义xml布局的时候,使用dp单位,wrap_content,fill_parent(match_parent)
  2. 为不同的屏幕密度提供不同的图片
  3. 对于有某些规则(渐变)的图片使用点九图
  4. 为特殊的屏幕类型(横竖屏)提供不同的布局

对于本节来说,是非常基础的知识,同时,这也是打造精品APP的必备知识,各位加油吧:P

时间: 2024-11-05 13:46:36

(转)android屏幕适配的相关文章

android屏幕适配详解

android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要使用绝对布局 2.尽量使用match_parent 而不是fill_parent . 3.能够使用权重的地方尽量使用权重(android:layout_weight) 4.如果是纯色背景,尽量使用android的shape 自定义. 5.如果需要在特定分辨率下适配,可以在res目录上新建layout

Android屏幕适配原理

大纲 1.android中res目录下的文件夹所对应屏幕尺寸 2.用dp表示尺寸的原理 3.对于720p尺寸的适配需要注意什么 4.ui切图按什么尺寸给最好 参考:http://www.360doc.com/content/12/0301/17/5087210_190881395.shtml 几个概念: 1) 屏幕密度(dpi) :dot per inch,即每英寸像素数. ldpi(120),mdpi(160),hdpi(240),xhdpi(320) 计算方法: 以480x854,4.0in

Android屏幕适配

1.基本概念 屏幕大小(screen size) —— 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸).android把屏幕分为以下4种:small,normal,large,extra large 屏幕密度(Screen Density) ——  一块实际的屏幕区域有多少个像素,一般用dpi衡量(每英寸有多少个点).相比起medium.high屏幕密度的设备,在一块确定大小的屏幕区域l密度为low的屏幕拥有的像素更少.android把屏幕密度分为4种:low,medium,h

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

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

Android屏幕适配全攻略

看到一篇写的超级棒的文章,这里就直接贴地址了: 原文地址:http://blog.csdn.net/zhaokaiqiang1992/article/details/45419023 其他参考资料: android屏幕适配详解:http://www.cnblogs.com/error404/p/3815739.html 官方意见:http://developer.android.com/guide/practices/screens_support.html

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

Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习本文,对于Android的屏幕适配,你将有所收获! Android屏幕适配出现的原因 重要概念 屏幕尺寸 屏幕分辨率 屏幕像素密度 dpdipdpisppx mdpihdpixdpixxdpi 解决方案 支持各种屏幕尺寸 使用wrap_contentmatch_parentweight 使用相对布局

Android屏幕适配问题详解

上篇-Android本地化资源目录详解 :http://www.cnblogs.com/stafen/p/3833048.html 单位: px(像素):屏幕上的点. in(英寸):长度单位. mm(毫米):长度单位. pt(磅):1/72英寸. dp/dip(与密度无关的像素):一种基于屏幕密度的抽象单位.在每英寸160点的显示器上,1dp = 1px,在大于160点的显示器上可能增大.一般用于位置和尺寸属性的单位. dpi:表示当前屏幕的密度. sp(与刻度无关的像素):主要用于字体大小单位

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

Android屏幕适配出现的原因 在我们学习如何进行屏幕适配之前,我们需要先了解下为什么Android需要进行屏幕适配. 由于Android系统的开放性,任何用户.开发者.OEM厂商.运营商都可以对Android进行定制,修改成他们想要的样子. 但是这种"碎片化"到底到达什么程度呢? 在2012年,OpenSignalMaps(以下简称OSM)发布了第一份Android碎片化报告,统计数据表明, 2012年,支持Android的设备共有3997种. 2013年,支持Android的设备

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

Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习本文,对于Android的屏幕适配,你将有所收获! 出处:http://blog.csdn.net/zhaokaiqiang1992 Android屏幕适配出现的原因 重要概念 屏幕尺寸 屏幕分辨率 屏幕像素密度 dpdipdpisppx mdpihdpixdpixxdpi 解决方案 支持各种屏幕尺

开源,原创,实用Android 屏幕适配方案分享

说来惭愧,这段时间忙项目,有时间也拿来调侃人生,好久没有写过技术文章了) 真正可用,并且简单易行,可以在多个屏幕大小和屏幕密度上有良好表现的Android 屏幕适配方案.   已经用在一款成熟互联网 应用中,效果还不错 http://www.meilijie.com/ask/view/377116/http://www.meilijie.com/ask/view/377668/http://www.meilijie.com/ask/view/377838/http://www.meilijie.