文档章节

如何创建支持不同屏幕尺寸的Android应用(转载)

mutouzhang
 mutouzhang
发布于 2014/03/09 20:29
字数 1293
阅读 46
收藏 1

源地址:http://wiki.eoe.cn/page/Supporting_Different_Screens

Supporting Different Screens

Android用两种常规属性来分类设备屏幕:尺寸和像素密度。作为开发者,你应当预料到你的android应用程序将会被安装到不同屏幕尺寸和像素密度的设备上。因此,你的应用应当包含可选的资源来优化应用外观,以便支持上述不同尺寸和像素密度的设备。

  • * 有四种广义的尺寸:small, normal, large, xlarge。

  • * 同样也有四种广义的像素密度:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)。

为了声明用于不同屏幕的不同layouts布局和bitmaps资源,你必须把这些可选的资源文件分别放在不同的目录,这一点类似于你在国际化时不同语言strings的操作。

同时要注意屏幕的方向(landscape or portrait)也被认为是一种屏幕尺寸的变化,所以大多数应用都应该修改layout布局来提高用户在不同屏幕方向上的体验。

创建不同的Layout布局文件-Create Different Layouts

为了提高在不同设备屏幕上的用户体验,你应当为每一种你想要支持的屏幕尺寸创建一个独有的XML布局文件。每一布局文件应当存放到恰当的资源目录下,该目录以屏幕尺寸-作为后缀。例如,一个用于大屏幕的布局文件应当放在res/layout-large/目录下面。

注:Android会自动缩放你的布局以便适配屏幕。这样,用于不同屏幕的布局文件就不必过多考虑UI元素的绝对大小,相反应当关注于布局的结构,这将直接影响用户体验(比如重要view视图的大小或位置应当相对于同级view视图)。

例如,下面的项目包含了一个默认的layout和一个可选的用于大屏幕的layout目录:

1
2
3
4
5
6
MyProject/
    res/
        layout/
            main.xml
        layout-large/
            main.xml

目录中的布局文件名必须保持一致,但是它们的内容可以不同,以便提供优化的UI来支持相对应的屏幕尺寸。

像往常一样在app中简单地获得layout布局文件的引用:

1
2
3
4
5
@Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
 }

Android系统将根据你的app应用所运行设备的屏幕尺寸从适当的layout目录加载布局文件。更多关于Android系统如何选择适当的资源文件可以在 Providing Resources | 资源提供 - Providing Resources 指导中获取。
下面是另外一个案例,在这个项目中使用了可选的横向布局来支持横向屏幕:

1
2
3
4
5
6
MyProject/
    res/
        layout/
            main.xml
        layout-land/
            main.xml

缺省情况下,layout/main.xml文件是垂直方向布局的。

如果你想提供一个特殊的横向布局,比如支持大屏幕,你需要同时使用large和land来修饰。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
MyProject/
    res/
        layout/              # default (portrait)
            main.xml
        layout-land/         # landscape
            main.xml
        layout-large/        # large (portrait)
            main.xml
        layout-large-land/   # large landscape
            main.xml

注:*Android 3.2 及以上版本支持一种更好的方法来定义屏幕尺寸,它允许我们在与密度无关的像素情况下通过最小宽度和高度来为不同屏幕指定资源。在本章节中我们没有涉及该新特性。如果想获得更多相关信息,请阅读Designing for Multiple Screens | 多屏幕适配设计 - Designing for Multiple Screens

创建不同的Bitmaps资源-Create Different Bitmaps

你应当为所有广义像素密度中的每一种都提供已经缩放好的适当的bitmap资源:低low, 中medium, 高high以及特高extra-high像素密度。这将使你的应用在所有分辨率的设备上都获得优良的图形质量和呈现效果。

为了生成这些图片资源,你应当以矢量图的格式来制作原始图片资源,然后根据下面的缩放尺寸生成每一种分辨率的图片:

  • 特高分辨率xhdpi: 2.0

  • 高分辨率hdpi: 1.5

  • 中分辨率mdpi: 1.0 (基准)

  • 低分辨率ldpi: 0.75

这意味着如果你要为特高分辨率设备生成一张200x200的图片,那么你需要为高分辨率设备生成150x150,中分辨率设备生成100x100,低分辨率设备生成75x75的图片。
然后把这些文件放置到恰当的资源目录:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
MyProject/
    res/
        drawable-xhdpi/
            awesomeimage.png
        drawable-hdpi/
            awesomeimage.png
        drawable-mdpi/
            awesomeimage.png
        drawable-ldpi/
            awesomeimage.png

以后在你引用@drawable/awesomeimage时,系统将根据设备的分辨率自动选择适当的图片资源。

注:低分辨率(ldpi)的资源并不总是必需的。当你提供高分辨率资源时,系统将把它们对半缩放来适配低分辨率设备。

获取更多关于创建应用图标的技巧和设计指导,可以查看Iconography design guide|图标设计指南-Iconography design guide。


© 著作权归作者所有

下一篇: android 主题
mutouzhang
粉丝 6
博文 190
码字总数 91235
作品 0
洛阳
程序员
私信 提问
android系统如何自适应屏幕大小

1、屏幕相关概念 1.1分辨率 是指屏幕上有横竖各有多少个像素 1.2屏幕尺寸 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 android将屏幕大小分为四个级别(small...

mfcai
2013/01/27
650
0
Android-支持多屏幕-1

原文链接:Supporting Multiple Screens Android运行在许多不同屏幕尺寸(screen size)和密度(screen density)的设备上。对于应用程序,Android系统提供了一致的跨设备开发环境,处理了应用程...

叶大侠
2014/08/24
1K
0
AndroidManifest.xml文件详解(supports-screens)

语法(SYNTAX): 被包含于(CONTAINED IN): 说明(DESCRIPTION): 这个元素用于指定应用程序所支持的屏幕尺寸,并针对比应用程序所支持的屏幕还要大屏幕,启用屏幕兼容模式。在应用程序中...

长平狐
2012/10/16
603
0
Android 屏幕自适应问题

Android9 patch 图片 (.9.png 格式图片) 的特点和制作 一.9.png格式的文件的特点 与传统的png 格式图片相比, 9.png 格式图片在图片四周有一圈一个像素点组成的边沿,该边沿用于对图片的可扩...

ljrapple
2015/03/02
51
0
基于Android平台的多分辨率解决方案[图]

摘要:近年来,智能手机的功能越来越强大,移动终端应用程序层出不穷,移动互联网改变人们的生活。Android系统是开放手机联盟推出的一款开源的手机操作系统,正是由于其开放性,没有采用Windows P...

笨笨熊的徒弟
2012/11/12
522
0

没有更多内容

加载失败,请刷新页面

加载更多

一起来学Java8(四)——复合Lambda

在一起来学Java8(二)——Lambda表达式中我们学习了Lambda表达式的基本用法,现在来了解下复合Lambda。 Lambda表达式的的书写离不开函数式接口,复合Lambda的意思是在使用Lambda表达式实现函...

猿敲月下码
19分钟前
6
0
debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
50分钟前
10
0
aelf Enterprise 0.8.0 beta有奖公测,“Bug奖金计划”重磅开启

2019年9月30日,aelf Enterprise 0.8.0 beta版正式发布。aelf Enterprise 0.8.0 beta是一个完备的区块链系统, 包含完备的区块链系统、开发套件、开发文档、以及配套的基础应用和基础服务。 ...

AELF开发者社区
51分钟前
8
0
oracle 初始化数据库脚本

create user lpf identified by 123456; create tablespace lpf_ts_cms datafile '/opt/app/oracle/product/11.2.0/lpf.dbf' size 200M; alter user lpf default tablespace lpf_ts_cms; sel......

internetafei
56分钟前
8
0
深入了解Redis底层数据结构

说明 说到Redis的数据结构,我们大概会很快想到Redis的5种常见数据结构:字符串(String)、列表(List)、散列(Hash)、集合(Set)、有序集合(Sorted Set),以及他们的特点和运用场景。不过它们是...

TurboSanil
56分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部