这节课程向你展示如何通过提供不同的资源和使用与分辨率无关的测量单位,支持不同屏幕密度。

使用密度无关的像素

——————————————————————————————————————————————————————————————

当设计你的布局的时候,你必须避免的一个常见的缺陷是使用绝对像素来定义距离和尺寸。用像素定义你的布局的尺寸是一个问题,因为不同的屏幕有不同的像素密度,所以同样的像素可能在不同的设备上,对应不同的物理尺寸。因此,当指定尺寸的时候,总是使用dp或者sp单位。1dp是一个密度独立的像素,它对应的物理大小是在160dpi中的1像素。1sp是相同的基本单位,但是它以用户首选的文本大小缩放(它是比例独立的像素),所以你在定义文本大小的时候使用这个测量单位(但是不用于布局大小)。

例如,当你指定两个视图之前的空间的时候,使用dp而不是px:

  1. <Button android:layout_width="wrap_content"
  2. android:layout_height="wrap_content"
  3. android:text="@string/clickme"
  4. android:layout_marginTop="20dp" /> <span style="font-family:'Calibri Light',sans-serif; font-size:10pt; line-height:13px; background-color:transparent; color:windowtext"> </span>

当指定文本大小的时候,总是使用sp:

  1. <TextView android:layout_width="match_parent"
  2. android:layout_height="wrap_content"
  3. android:textSize="20sp" />

提供可选的位图

——————————————————————————————————————————————————————————————

由于Android运行在具有广泛屏幕密度的设备上,你应该总是根据每个广义的密度度量定制你的位图资源:low,medium,high和extra-high密度。

为了产生这些图像,你应该从你矢量格式的原始资源开始,然后使用下面的大小缩放产生每个密度的图片:

  • xhdpi:2.0

  • hdpi:1.5

  • mdpi:1(基准)

  • ldpi:0.75

这意味着如果你为xhdpi设备生成一个200*200的图片。你应该为hdpi生成150*150同样的资源,为mdpi 100*100和最后为ldpi设备75*75的图片。

然后,将这些生成的图片放置的res/目录下对应的子目录中。你的应用程序在运行的时候,系统会基于设备屏幕的密度,自动选择正确的图片:

MyProject/

res/

drawable-xhdpi/

awesomeimage.png

drawable-hdpi/

awesomeimage.png

drawable-mdpi/

awesomeimage.png

drawable-ldpi/

awesomeimage.png

然后,你在任何使用引用@drawable/awesomeimage,系统基于屏幕的dpi选择合适的位图。

更多关于为你的应用创建图标资源的提示和指导,查看Icon Design Guidelines。

Android Developers:支持不同的屏幕密度的更多相关文章

  1. Android中图片大小和屏幕密度的关系讲解

    Android手机适配是非常让人头疼的一件事,尤其是图片,android为了做到是适配提供了很多文件夹来存放不同大小的图片,比如:drawable-ldpi.drawable-mdpi.drawabl ...

  2. 【Android Developers Training】 12. 支持不同屏幕

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. 支持不同Android设备,包括:不同尺寸屏幕、不同屏幕密度、不同系统设置

    Some of the important variations that you should consider include different languages, screen sizes, ...

  4. android多分辨率多屏幕密度下UI适配方案

    相关概念 分辨率:整个屏幕的像素数目,为了表示方便一般用屏幕的像素宽度(水平像素数目)乘以像素高度表示,形如1280x720,反之分辨率为1280x720的屏幕,像素宽度不一定为1280 屏幕密度:表 ...

  5. android 布局如何支持多种不同屏幕尺寸

    android 布局如何支持多种不同屏幕尺寸 --关于dp.layout-xxx.drawable-xxx作用的小结 转载自:http://blog.csdn.net/vincent_blog/art ...

  6. 【Android Developers Training】 10. 序言:支持不同设备

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  7. 如何使Android应用支持多种屏幕分辨率

    原文:http://android.eoe.cn/topic/android_sdk 描述: 让您指定您的应用支持的屏幕的大小并且可以通过屏幕兼容模式来支持比您应用所支持更大的屏幕.所以这对于您需要在 ...

  8. Android(三) 匹配屏幕密度

    过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个dpi(每英寸点数) 高的显示器上运行该程序,则用户界面会显得很小.在有些情况下,用户界面 ...

  9. Android界面设计适配不同屏幕的尺寸和密度解读

    Android是运行在各种提供不同的屏幕尺寸和密度的设备.Android系统提供跨设备的统一开发环境和处理大部分的工作,以调整每个应用程序的用户界面,以在其上显示的画面. 同时,该系统提供了API,允 ...

随机推荐

  1. 在Linux系统中增加和删除用户

    linux创建账户并自动生成主目录和主目录下的文件 在Linux系统中增加和删除用户 Linux添加用户(user)到用户组(group) usermod -a -G groupA user linu ...

  2. VMware vCenter Orchestrator

    使用范例: VMware Automation with vCenter Orchestrator http://www.rodmach.com/blog/?p=46 直接从 VSPHERE CLIE ...

  3. Python+H5py实现将SVHN样本库转换为FasterRcnn训练样本

    一.上代码 import os import h5py svhnPath = 'D:\\Project\\AIProject\\SVHNClassifier\\data' def loadSvhn(p ...

  4. #define barrier() __asm__ __volatile__("": : :"memory") 中的memory是gcc的东西

    gcc内嵌汇编简介 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作 ...

  5. java相关知识集锦

    java语言基础知识: Java8 Stream语法详解 不用循环 java 8系列之Stream的基本语法详解 java8 stream filter等功能代替for Java中try catch ...

  6. string int 类型转换

    string  int  类型转换 (int) 此方法不适用于将string 转换为int 只能转换数值类型为int 而不能转换引用类型 不会四舍五入 直接去掉小数位 Conver.ToInt() 会 ...

  7. Python学习笔记八:ORM框架SQLAlchemy

    一:SQLAlchemy使用 1:实体类的创建 ORM中的实体类与一般的Python类不同,在其中,使用 __tablename__=""指明该类与数据库中某个表相对应,然后定义一 ...

  8. 【转发】Linq To EF添加记录后获取添加的自增ID和叫“ID”的列不是自增列不让插入的问题

    1:添加记录后,如何获取新添加的ID的值 比如,一个实体 TestEntity   对应一个表TestEntity(ID主键自增,Name,age),使用linq to ef   添加一条记录后,如何 ...

  9. node.js模块化写法入门

    子模块的写法: function SVN(){ console.log('svn initialized'); return this; } function getInstance() { cons ...

  10. 我的第一个android应用——装逼神器《微博尾》

    继<微博尾>之<玩转尾巴>好玩尾巴积分版传送门:http://blog.csdn.net/love_5209/article/details/39473983 (本文andro ...