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.

目录
相关文章
|
4月前
|
JavaScript Android开发
使用贝叶斯曲线滑动安卓屏幕(autojsPro7)
使用贝叶斯曲线滑动安卓屏幕(autojsPro7)
174 0
|
4月前
|
XML Java Android开发
Android Studio App开发之捕获屏幕的变更事件实战(包括竖屏与横屏切换,回到桌面与切换到任务列表)
Android Studio App开发之捕获屏幕的变更事件实战(包括竖屏与横屏切换,回到桌面与切换到任务列表)
138 0
|
编解码 开发工具 Android开发
Android平台RTSP轻量级服务|RTMP推送摄像头或屏幕之音频接口设计
好多开发者在做Android平台录像或者RTSP轻量级服务、RTMP推送相关模块时,对需要设计哪些常用接口会心存疑惑,本文主要以大牛直播SDK(官方)为例,简单介绍下Android平台直播推送SDK所有音频相关的接口,感兴趣的开发者可以看看。
|
4月前
|
开发工具 Android开发
rk平台Android12屏幕永不休眠
rk平台Android12屏幕永不休眠
58 1
|
2月前
|
存储 数据库 Android开发
🔥Android Jetpack全解析!拥抱Google官方库,让你的开发之旅更加顺畅无阻!🚀
【7月更文挑战第28天】在Android开发中追求高效稳定的路径?Android Jetpack作为Google官方库集合,是你的理想选择。它包含多个独立又协同工作的库,覆盖UI到安全性等多个领域,旨在减少样板代码,提高开发效率与应用质量。Jetpack核心组件如LiveData、ViewModel、Room等简化了数据绑定、状态保存及数据库操作。引入Jetpack只需在`build.gradle`中添加依赖。例如,使用Room进行数据库操作变得异常简单,从定义实体到实现CRUD操作,一切尽在掌握之中。拥抱Jetpack,提升开发效率,构建高质量应用!
49 4
|
4月前
|
Shell Android开发
ADB更改Android设备屏幕显示方向
ADB更改Android设备屏幕显示方向
269 5
|
4月前
|
Android开发
获取Android设备屏幕大小
获取Android设备屏幕大小
86 3
|
4月前
|
XML Java Android开发
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
390 1
|
4月前
|
JSON Android开发 数据格式
Android框架-Google官方Gson解析,android开发实验报告总结
Android框架-Google官方Gson解析,android开发实验报告总结
|
4月前
|
存储 XML 编译器
【Android 从入门到出门】第二章:使用声明式UI创建屏幕并探索组合原则
【Android 从入门到出门】第二章:使用声明式UI创建屏幕并探索组合原则
94 3