Android官方开发文档Training系列课程中文版:多样屏幕之支持不同的屏幕密度

简介: 原文地址:http://android.xsoftlab.net/training/multiscreen/screendensities.html这节课将会学习如何通过不同的资源以及独立的测量单位来支持不同的屏幕密度。

原文地址:http://android.xsoftlab.net/training/multiscreen/screendensities.html

这节课将会学习如何通过不同的资源以及独立的测量单位来支持不同的屏幕密度。

使用密度独立的像素单位

你必须要避免这么一个陷阱:在设计布局时,使用了绝对的像素单位来定义距离及尺寸。通过像素来定义布局的尺寸是个问题,因为不同的屏幕含有不同的像素密度,所以在不同的设备上使用同一像素长度会造成不同的物理尺寸。因此在指定尺寸时,应该总是使用dp或者sp为单位。dp是一种密度独立的像素单位,在160dpi时与像素的物理尺寸正好吻合(也就是说160dpi的屏幕dp正好等于sp)。sp同样也是一种基准单位,但是它一种可伸缩的文本尺寸单位,所以应当在定义文本尺寸时使用该单位(绝不要在布局上使用该单位)。

比如说,在指定两个View之间的空隙时,应该使用dp,而不是px:

<Button android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/clickme"
    android:layout_marginTop="20dp" />

在指定文本大小时,总是使用sp:

<TextView android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp" />

提供备选位图

因为Android运行于种类繁多的设备上,所以应当为普遍的密度范围提供相应的位图资源:low, medium, high及extra-high密度。这有助于提升所有屏幕密度的物理效果及性能。

为了产生这些位图,应当通过原生资源生成多种密度的图像:

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (基准线)
  • ldpi: 0.75

这意味着如果为xhdpi的设备生成了200x200的图像,那么应该为hdpi提供的尺寸为150x150,mdpi为100x100,ldpi为75x75。

然后将这些文件分别放入适当的目录下,在运行时,系统会根据当前的屏幕密度自动选择正确的位图:

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

接下来,在任何时候引用@drawable/awesomeimage时,系统会基于屏幕的dpi选择合适的位图图像。

最后将启动图标放入到mipmap/文件夹下:

res/...
    mipmap-ldpi/...
        finished_launcher_asset.png
    mipmap-mdpi/...
        finished_launcher_asset.png
    mipmap-hdpi/...
        finished_launcher_asset.png
    mipmap-xhdpi/...
        finished_launcher_asset.png
    mipmap-xxhdpi/...
        finished_launcher_asset.png
    mipmap-xxxhdpi/...
        finished_launcher_asset.png

Note: 应当将所有的启动图标放入到res/mipmap-[density]/文件夹下,而不是drawable/文件夹中,这样可以确保桌面APP使用了最佳的分辨率图标。有关更多信息,请参见Managing Projects Overview

有关更多创建图标资源的提示与指南,请参见Icon Design Guidelines.

目录
相关文章
|
缓存 算法 网络协议
Android面试回忆录移动应用开发专业核心课程
Android面试回忆录移动应用开发专业核心课程
|
Java Android开发
Android开发系列全套课程
本系列课程面向有java基础,想进入企业从事android开发的计算机专业者。学习搭配实战案例,高效掌握岗位知识。
181 1
|
XML Android开发 数据格式
Fragment的使用,零基础入门android逆向视频课程
Fragment的使用,零基础入门android逆向视频课程
|
存储 SQL JSON
Android入门教程 (零)付费专栏课程规划
Android入门教程 (零)付费专栏课程规划
231 0
|
XML 编解码 Android开发
【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题(二)
【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题(二)
369 0
【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题(二)
|
Android开发
【Android 内存优化】Bitmap 图像尺寸缩小 ( 考虑像素密度、针对从不同像素密度资源中解码对应的 Bitmap 对象 | inDensity | inTargetDensity )
【Android 内存优化】Bitmap 图像尺寸缩小 ( 考虑像素密度、针对从不同像素密度资源中解码对应的 Bitmap 对象 | inDensity | inTargetDensity )
409 0
|
存储 编解码 Android开发
【Android 内存优化】Bitmap 内存占用计算 ( Bitmap 图片内存占用分析 | Bitmap 内存占用计算 | Bitmap 不同像素密度间的转换 )
【Android 内存优化】Bitmap 内存占用计算 ( Bitmap 图片内存占用分析 | Bitmap 内存占用计算 | Bitmap 不同像素密度间的转换 )
359 0
|
编解码 程序员 开发工具
【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题(一)
【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题(一)
274 0
|
XML 前端开发 Android开发
4.kotlin安卓实践课程-用kotlin写第一个activity(构建mvvm和mvp基本页面)
简介 主要会通过安卓实战来讲解kotlin语法和实际应用,本教程设及知识点包括框架模式mvp+mvvm, Databinding(数据绑定框架),Dagger2(依赖注入框架),DeepLink(页面路由框架),Rxjava,RxAndroid(异步操作框架),Retrofit,Okhtttp等,不过本教程重点在kotlin所以这些框架需要了解可自行百度。
1788 0
|
程序员 API Android开发
2.kotlin安卓实践课程-ApiComponent(Api注射器)
简介 主要会通过安卓实战来讲解kotlin语法和实际应用,本教程设及知识点包括框架模式mvp+mvvm, Databinding(数据绑定框架),Dagger2(依赖注入框架),DeepLink(页面路由框架),Rxjava,RxAndroid(异步操作框架),Retrofit,Okhtttp等,不过本教程重点在kotlin所以这些框架需要了解可自行百度。
1352 0

热门文章

最新文章