Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的屏幕

简介: 原文地址 : http://android.xsoftlab.net/training/basics/supporting-devices/screens.html#create-bitmapsAndroid设备屏幕分为两个通用的属性:尺寸和密度。

原文地址 : http://android.xsoftlab.net/training/basics/supporting-devices/screens.html#create-bitmaps

Android设备屏幕分为两个通用的属性:尺寸和密度。你应该期待应用将会被安装在屏幕的密度和尺寸都在范围内的设备上。正因为这样,你应该包含一些可替换的资源,以便应用在不同尺寸的屏幕和不同密度的屏幕效果最优。

  • 有4种普遍屏幕尺寸:small, normal, large, xlarge。、
  • 还有4种普遍的屏幕密度:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)。

为了对不同的屏幕声明使用不同的布局和图像,你必须将这些备选资源分开放置,和不同的语言字符串很类似。

这里也应该意识到要考虑屏幕的方向,所以很多应用应该通过布局为不同的方向提供良好的用户体验。

创建不同的布局

为了在不同尺寸的屏幕上提升用户体验,你应该为想要支持的屏幕尺寸创建唯一的XML布局文件。
每一个布局文件应该保持在合适的资源目录下,以-< screen_size>为后缀,唯一的大屏幕布局应该被保存在目录res/layout-large下。

Note: Android为了适配屏幕会拉伸你的布局。所以,不需要关心每一种尺寸的布局元素的绝对尺寸,而应该关心布局之间的结构关系,否则会影响用户体验。

下面这个工程为大屏幕提供了一个合适的布局。

MyProject/
    res/
        layout/
            main.xml
        layout-large/
            main.xml

文件名称要尽可能的准确,但是其中的内容为了不同尺寸的屏幕可以不一样。
一般在代码中简单的引用下布局文件:

@Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
}

系统会在应用运行的时候基于设备的屏幕尺寸加载合适的布局文件。更多关于Android如何选择合适的可用资源请参见:Providing Resources

像其它工程一样,这个工程为水平方向提供了适当的布局:

MyProject/
    res/
        layout/
            main.xml
        layout-land/
            main.xml

默认情况下,layout/main.xml被用作于默认方向。

如果需要为大屏幕的水平方向屏幕提供布局,那么你需要同时使用large和land标识符:

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

Note: Android 3.2及更高的版本对于支持规定的屏幕尺寸有更为先进的方法。它允许你为一定范围内的屏幕尺寸提供资源,一定范围包括自小的宽度,高度和密度。这节课不覆盖这些新知识点,有关更多信息,请参见:Designing for Multiple Screens

创建不同的位图

你应该提供合适的位图资源给每个通用的密度区域:low, medium, high and extra-high density,这可以帮助你在所有的密度下达到良好的图像效果和性能。

为了产生这些图像,你应该根据矢量格式的真实资源来为每一种密度提供扩展尺寸:

xhdpi: 2.0
hdpi: 1.5
mdpi: 1.0 (baseline)
ldpi: 0.75

这里的意思是说,如果你为xhdpi的设备生成了一张200x200的图像,那么你应该为hdpi生成150x150的图像,以此推类。

然后,将这些文件放入到合适的图像资源目录下:

MyProject/
    res/
        drawable-xhdpi/
            awesomeimage.png
        drawable-hdpi/
            awesomeimage.png
        drawable-mdpi/
            awesomeimage.png
        drawable-ldpi/
            awesomeimage.png

任何时候通过@drawable/awesomeimage引用图像的时候,系统会根据密度选择合适的位图图像。

Note: 低密度ldpi并不总是必须的。当你提供了hdpi的资源,系统会将hdpi资源缩小一半来适应ldpi的屏幕。

更多有关为APP创建icon资源的提示和指南,请参见:Iconography design guide.

目录
相关文章
|
2月前
|
Android开发
如何用Airtest脚本无线连接Android设备?
如何用Airtest脚本无线连接Android设备?
|
3月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
61 0
|
4天前
|
Java Android开发
Android Mediatek 应用层重置USB设备功能
Android Mediatek 应用层重置USB设备功能
11 0
|
4天前
|
Android开发
Android Mediatek USB 核心驱动中增加设备 PID/VID 检查
Android Mediatek USB 核心驱动中增加设备 PID/VID 检查
3 0
|
13天前
|
编解码 人工智能 测试技术
安卓适配性策略:确保应用在不同设备上的兼容性
【4月更文挑战第13天】本文探讨了提升安卓应用兼容性的策略,包括理解平台碎片化、设计响应式UI(使用dp单位,考虑横竖屏)、利用Android SDK的兼容工具(支持库、资源限定符)、编写兼容性代码(运行时权限、设备特性检查)以及优化性能以适应低端设备。适配性是安卓开发的关键,通过这些方法可确保应用在多样化设备上提供一致体验。未来,自动化测试和AI将助力应对设备碎片化挑战。
|
1月前
|
Java Android开发
Android开发系列全套课程
本系列课程面向有java基础,想进入企业从事android开发的计算机专业者。学习搭配实战案例,高效掌握岗位知识。
18 1
|
1月前
|
Shell 开发工具 Android开发
ADB 下载、安装及使用教程:让你更好地管理 Android 设备
ADB 下载、安装及使用教程:让你更好地管理 Android 设备
513 2
|
3月前
|
开发工具 Android开发
Android平台RTMP推送|轻量级RTSP服务|GB28181设备接入模块之实时快照保存JPG还是PNG?
Android平台RTMP推送|轻量级RTSP服务|GB28181设备接入模块之实时快照保存JPG还是PNG?
|
5天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
28天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
14 0