Android屏幕的适配

原创 2015年07月10日 22:42:03

Android屏幕的适配

相关的术语和概念

屏幕大小(Screen size):屏幕大小指的是屏幕物理尺寸的大小,根据屏幕的对角线长度来衡量。在android中,将屏幕尺寸简单的分为small, normal, large, and extra-large几种。

屏幕密度(Screen density):在单位面积内的像素点(pixels)密度,通常是以dpi(dots per inch)来衡量的。android根据不同的dpi,把设备分为:low, medium, high, extra-high, extra-extra-high, and extra-extra-extra-high。

屏幕方向(Orientation):屏幕对用户的方向,是横向的还是纵向的。

分辨率(Resolution):屏幕上所有像素点的数量。一般在程序做屏幕适配的时候,不会直接用到这个参数,而是根据screen size 和density来调整显示。

Density-independent pixel (dp):指的是逻辑密度计算单位,dip和具体像素值的对应公式是dip/pixel=dpi值/160,也就是px = dp * (dpi / 160)。在布局中,一般都使用dp做为单位。

支持的屏幕范围

android根据不同的屏幕大小,将屏幕分为:
small, normal, large, and xlarge.
根据不同的屏幕分辨率,可以把屏幕分为:

  • ldpi (low) ~120dpi
  • mdpi (medium) ~160dpi
  • hdpi (high) ~240dpi
  • xhdpi (extra-high) ~320dpi
  • xxhdpi (extra-extra-high) ~480dpi
  • xxxhdpi (extra-extra-extra-high) ~640dpi

它们对应的图片描素是:
这里写图片描述

dpi值的计算

dpi=2+2/线,其中的长,宽代表屏幕的实际px点,而对角线代表的是屏幕的物理inch对角线长度。

如何做到自适应屏幕大小呢

界面布局方面,需要根据物理尺寸的大小准备5套布局,layout(放一些通用布局xml文件,比如界面中顶部和底部的布局,不会随着屏幕大小变化,类似windos窗口的title bar),layout-small(屏幕尺寸小于3英寸左右的布局),layout-normal(屏幕尺寸小于4.5英寸左右),layout-large(4英寸-7英寸之间),layout-xlarge(7-10英寸之间),但是这只是在Android3.2之前有用,在android3.2之后,引入了layout-sw n dp的表示方式,比如layout-sw600dp/表示最小屏幕有600dp大。

第二种后缀w N dp 如layout-w600dp, values-w600dp
带这样后缀的资源文件的资源文件制定了屏幕宽度的大于Ndp的情况下使用该资源文件,但它和sw N dp不同的是,当屏幕横向纵向切换时,屏幕的宽度是变化的,以变化后的宽度来与N相比,看是否使用此资源文件下的资源。
第三种后缀h N dp 如layout-h600dp, values-h600dp
这个后缀的使用方式和w N dp一样,随着屏幕横纵向的变化,屏幕高度也会变化,根据变化后的高度值来判断是否使用h N dp ,但这种方式很少使用,因为屏幕在纵向上通常能够滚动导致长度变化,不像宽度那样基本固定,因为这个方法灵活性不是很好,google官方文档建议尽量少使用这种方式。

图片资源方面,需要根据dpi值准备5套图片资源,drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi
Android有个自动匹配机制去选择对应的布局和图片资源。

使用配置限定符

在前面也看见了,在res/文件夹下面,可以使用:
<resources_name>-<qualifier>
这样的方式来限定资源的使用条件,其中:

  • <resources_name>is the standard resource name (such as drawable or layout).
  • <qualifier> is a configuration qualifier from table 1, below, specifying the screen configuration for which these resources are to be used (such as hdpi or xlarge).

你可以使用多个qualifier,只需要用破折号把它们连起来。
所有的qualifier列举如下:

Screen characteristic Qualifier Description
Size small Resources for small size screens.
normal Resources for normal size screens. (This is the baseline size.)
large Resources for large size screens.
xlarge Resources for extra-large size screens.
Density ldpi Resources for low-density (ldpi) screens (~120dpi).
mdpi Resources for medium-density (mdpi) screens (~160dpi). (This is the baseline density.)
hdpi Resources for high-density (hdpi) screens (~240dpi).
xhdpi Resources for extra-high-density (xhdpi) screens (~320dpi).
xxhdpi Resources for extra-extra-high-density (xxhdpi) screens (~480dpi).
xxxhdpi Resources for extra-extra-extra-high-density (xxxhdpi) uses (~640dpi). Use this for the launcher icon only, see note above.
nodpi Resources for all densities. These are density-independent resources. The system does not scale resources tagged with this qualifier, regardless of the current screen’s density.
tvdpi Resources for screens somewhere between mdpi and hdpi; approximately 213dpi. This is not considered a “primary” density group. It is mostly intended for televisions and most apps shouldn’t need it—providing mdpi and hdpi resources is sufficient for most apps and the system will scale them as appropriate. If you find it necessary to provide tvdpi resources, you should size them at a factor of 1.33*mdpi. For example, a 100px x 100px image for mdpi screens should be 133px x 133px for tvdpi.
Orientation land Resources for screens in the landscape orientation (wide aspect ratio).
port Resources for screens in the portrait orientation (tall aspect ratio).
Aspect ratio long Resources for screens that have a significantly taller or wider aspect ratio (when in portrait or landscape orientation, respectively) than the baseline screen configuration.
notlong Resources for use screens that have an aspect ratio that is similar to the baseline screen configuration.

Android屏幕适配方案(上)

Android开发中,屏幕适配始终是第一个要解决的问题,这一点在实际写的时候其实我们都会注意,然而现在我觉得整理一下屏幕适配方面的知识以便记录,博客写的太少,始终得多记录一下 首先关于屏幕,主流的...
  • YANGDAHUAN
  • YANGDAHUAN
  • 2017年03月03日 20:20
  • 3539

Android 屏幕适配方案

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/45460089; 本文出自:【张鸿洋的博客】 1、概述大家在Andr...
  • lmj623565791
  • lmj623565791
  • 2015年05月04日 13:08
  • 314870

Android开发:最全面、最易懂的Android屏幕适配解决方案

前言 Android的屏幕适配一直以来都在折磨着我们Android开发者,本文将结合: Google的官方权威适配文档郭霖: Android官方提供的支持不同屏幕大小的全部方法Stormzhang...
  • wangwangli6
  • wangwangli6
  • 2017年03月18日 16:37
  • 7677

最清晰的Android多屏幕适配方案

当您的Android应用即将发布的时候,如果你想让更多的用户去使用你的应用,摆在工程师面前的一个重要问题就是如何让你的应用能在各种各样的终端上运行,这里的各种各样首当其冲的就是不同的屏幕分辨率和尺...
  • shimiso
  • shimiso
  • 2016年07月29日 09:22
  • 6546

android gridView屏幕适配,以及GridView的各种属性

** * 获取屏幕宽度 */ public static int getScreenWidth(Context context) { WindowManager manager = (Wi...
  • ITzhongzi
  • ITzhongzi
  • 2016年07月05日 11:50
  • 1148

最新 Android屏幕适配全攻略(官方权威适配方案)

目录(?)[-] Android屏幕适配出现的原因重要概念 屏幕尺寸屏幕分辨率屏幕像素密度dpdipdpisppxmdpihdpixdpixxdpi 解决方案 支持各种屏幕尺寸 ...
  • MLQ8087
  • MLQ8087
  • 2016年07月21日 11:01
  • 1318

安卓采用AutoLayout开源框架屏幕适配方案

一、概述 相信Android的开发者对于设配问题都比较苦恼,Google官方虽然给出了一系列的建议,但是想要单纯使用这些建议将设备很轻松的做好,还是相当困难的。个人也比较关注适配的问题,之前也发...
  • Me_Dong
  • Me_Dong
  • 2016年12月13日 13:12
  • 1438

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

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

Android最便捷的屏幕适配,堪称屏幕适配终结者

效果图 最大幅度解决适配问题,并且最大化方便开发者。 so,看下用法: 你没有看错,拿到设计稿,在布局文件里面直接填写对应的px即可,px:这里的px并非是Google不建议使用的px,...
  • qq_23477421
  • qq_23477421
  • 2016年07月04日 10:34
  • 2873

Android 屏幕适配:最全面的解决方案

前言 Android的屏幕适配一直以来都在折磨着我们Android开发者,本文将结合: Google的官方权威适配文档 郭霖: Android官方提供的支持不同屏幕大小的全部方法 Stormzha...
  • zhangjin12312
  • zhangjin12312
  • 2017年10月24日 15:09
  • 789
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android屏幕的适配
举报原因:
原因补充:

(最多只允许输入30个字)