原文地址: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.pngdrawable-hdpi/awesomeimage.pngdrawable-mdpi/awesomeimage.pngdrawable-ldpi/awesomeimage.png

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

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

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

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

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

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

  1. Android官方开发文档Training系列课程中文版:目录

    原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...

  2. Android官方开发文档Training系列课程中文版:创建自定义View之View的创建

    原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...

  3. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  4. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建

    原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...

  5. Android官方开发文档Training系列课程中文版:构建第一款安卓应用之入门指南

    入门指南 欢迎来到安卓开发训练课,在这里你可以找到一系列课程来描述如何使用现有的代码示例来重新适用到你的APP上,你可以在左侧的导航栏顶部看到在若干个大项里有若干个有组织的子项课程.(导航栏请参见官方 ...

  6. Android官方开发文档Training系列课程中文版:手势处理之滚动动画及Scroller

    原文地址:http://android.xsoftlab.net/training/gestures/scroll.html 在Android中,滑动经常由ScrollView类来实现.任何超出容器边 ...

  7. Android官方开发文档Training系列课程中文版:管理系统UI之变暗系统条

    原文地址:http://android.xsoftlab.net/training/system-ui/index.html 引言 系统条(System Bars)是屏幕上的一块显示区域,专门用来显示 ...

  8. Android官方开发文档Training系列课程中文版:创建自定义View之View的绘制

    原文地址:http://android.xsoftlab.net/training/custom-views/custom-drawing.html#draw 自定义View最重要的部分就是它的样子了 ...

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

    原文地址:http://android.xsoftlab.net/training/multiscreen/index.html 引言 Android运行于数以百计不同尺寸的设备上.范围小到手持移动电 ...

最新文章

  1. Linux 下Shell脚本删除过期文件
  2. 除了TensorFlow、PyTorch,还有哪些深度学习框架值得期待?
  3. PHP PDO 预处理语句与存储过程
  4. 应用程序框架实战三十六:CRUD实战演练介绍
  5. windows和centos进行文件上传和下载
  6. c#爬虫-解决ChromeDriver 版本问题
  7. abap调vb写的dll实现电子天平的读数(带控件版)
  8. matlab弗洛伊德算法,MATLAB弗洛伊德算法结果有疑惑,求大神解答
  9. 网络安全教程下载,呵呵
  10. win11适合玩游戏吗 Windows11打游戏怎么样
  11. 类的加载过程详解之过程二:Linking(链接)阶段
  12. FAT32中文版分析+补充(3)
  13. mybaitis-plus 持久层高效开发, 懒人神器
  14. android 右侧点击翻页,巧用ViewPager实现驾考宝典做题翻页效果
  15. 计算机地图综合制图实验报告,地图制图实验报告.doc
  16. 解决Flash Helper Service老是弹出流氓广告
  17. 新手如何对文件进行简单的上传
  18. 如何通过命令提示符进入MySQL服务器
  19. TMS320C28x系列TMS320F2837x开发板的JTAG仿真器接口、ADC接口
  20. 【阅读心得】Python编程无师自通——专业程序员的养成

热门文章

  1. boost::split()的使用方式
  2. 1万字30张图说清TCP协议
  3. 图文|Android 使用Thread 和多线程使用互斥锁
  4. 每日一题(47)—— 置1与清0
  5. python的三维图片_python如何做三维图
  6. problem b: 一年中的第几天_第九届蓝桥杯B组试题
  7. 相邻位数字差值的绝对值不能超过_热点争议中技术问题,伺服控制有几个零点?对应真绝对值多圈编码器意义...
  8. LeetCode 2190. 数组中紧跟 key 之后出现最频繁的数字
  9. LeetCode 1879. 两个数组最小的异或值之和(状态压缩DP)
  10. 程序员面试金典 - 面试题 17.07. 婴儿名字(并查集)