当前位置: 首页 > 编程日记 > 正文

android屏幕分辨率详解 ldpi mdpi hdpi 程序UI自适应 《官方翻译》

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

看世界杯的空闲 时间,翻译一下 官方文档。分辨率 问题是大家都很关心的(720×480会不会悲剧),而关于这个问题,android官方的文档无疑最有说服力。由于不是所有的人都愿意去读英文,所以趁球赛没开始,翻译一些。

原文地址: http://developer.android.com/guide/practices/screens_support.html

————————下面是翻译—————————我是分割线—————————

       多分辨率支持

  在设计之初, Android 系统就被设计为一个可以在多种不同分辨率的设备上运行的操作系统。对于应用程序来说,系统平台向它们提供的是一个稳定的,跨平台的运行环境,而关于如何将程序以正确的方式显示到它所运行的平台上所需要的大部分技术细节,都由系统本身进行了处理,无需程序的干预。当然,系统本身也为程序提供了一系列API,所以在目标平台的分辨率是可以完全确定的情况下,程序也可以精确的控制自身在目标平台上的 界面显示方式。

  这个文档会说明系统平台究竟提供了哪些分辨率支持特性,与它们如何在程序中使用的信息。如果你遵循文档中列出的方法,就很容易让你的程序在所有支持的分辨率下都能完美显示。这样你就可以用一个单独的.apk 文件,将你的程序发布到所有的平台上。

  如果你已经发布过针对Android 1.5或更早版本平台的程序,你应该仔细阅读这篇文档,然后考虑一下到底如何让自己的老程序可以在拥有各种不同分辨率,并且运行着Android 1.6或更新平台上正常显示。在绝大部分情况下,只需要对程序作出小小的修改就可以达到目的,但你仍然需要尽可能地在各种分辨率的平台上进行测试。
  特别的,如果你有一个已经完成的程序,又想让它可以在超低分辨率的设备(比如320×240)上正确运行,你需要阅读“老程序的更新策略”,那篇文档会告诉你应该怎么做。

术语和概念
屏幕尺寸
屏幕的物理尺寸,以屏幕的对角线长度作为依据(比如2.8寸,3.5寸)。
简而言之,Android把所有的屏幕尺寸简化为三大类:大,正常,和小。
程序可以针对这三种尺寸的屏幕提供三种不同的布局方案,然后系统会负责把你的布局方案以合适的方式渲染到对应的屏幕上,这个过程是不需要程序员用代码来干预的。

屏幕长宽比
屏幕的物理长度与物理宽度的比例。程序可以为制定长宽比的屏幕提供制定的素材,只需要用系统提供的资源分类符longnotlong

分辨率
屏幕上拥有的像素的总数。注意,虽然大部分情况下分辨率都被表示为“宽度×长度”,但分辨率并不意味着屏幕长宽比。在Android系统中,程序一般并不直接处理分辨率。

密度
以屏幕分辨率为基础,沿屏幕长宽方向排列的像素。
密度较低的屏幕,在长和宽方向都只有比较少的像素,而高密度的屏幕通常则会有很多——甚至会非常非常多——像素排列在同一区域。屏幕的密度是非常重要的,举个例子,长宽以像素为单位定义的界面元素(比如一个按钮),在低密度的屏幕上会显得很大,但在高密度的屏幕上则会显得很小。

密度无关的像素(DIP
指一个抽象意义上的像素,程序用它来定义界面元素。它作为一个与实际密度无关的单位,帮助程序员构建一个布局方案(界面元素的宽度,高度,位置)。
一个与密度无关的像素,在逻辑尺寸上,与一个位于像素密度为160DPI的屏幕上的像素是一致的,这也是Android平台所假定的默认显示设备。在运行的时候,平台会以目标屏幕的密度作为基准,“透明地”处理所有需要的DIP缩放操作。要把密度无关像素转换为屏幕像素,可以用这样一个简单的公式:pixels = dips * (density / 160)。举个例子,在DPI240的屏幕上,1DIP等于1.5个物理像素。我们强烈推荐你用DIP来定义你程序的界面布局,因为这样可以保证你的UI在各种分辨率的屏幕上都可以正常显示。


支持的屏幕分辨率范围
1.5及更早版本的Android系统,在设计的时候假定系统只会运行在一种分辨率的设备上——HVGA320×480)分辨率,尺寸为3.2寸。由于系统只能工作在一种屏幕上,开发人员就可以针对那个屏幕来编写自己的程序,而无需去考虑程序在其他屏幕上的显示问题。
但自从Android 1.6以来,系统引入了对多种尺寸、多种分辨率屏幕的支持,以此满足拥有各种配置的新平台的运行需求。这就意味着开发人员在针对Android 1.6或更新版系统开发程序的时候,需要为自己的程序在多种分辨率的屏幕上良好显示作出额外的设计。
为了简化程序员面在对各种分辨率时的困扰,也为了具备各种分辨率的平台都可以直接运行这些程序,Android平台将所有的屏幕以密度和分辨率为分类方式,各自分成了三类:
·三种主要的尺寸:大,正常,小;
·三种不同的密度:高(hdpi),中(mdpi)和低(ldpi)。
如果需要的话,程序可以为各种尺寸的屏幕提供不同的资源(主要是布局),也可以为各种密度的屏幕提供不同的资源(主要是位图)。除此以外,程序不需要针对屏幕的尺寸或者密度作出任何额外的处理。在执行的时候,平台会根据屏幕本身的尺寸与密度特性,自动载入对应的资源,并把它们从逻辑像素(DIP,用于定义界面布局)转换成屏幕上的物理像素。
下表列出了Android平台支持的屏幕中一些比较常用的型号,并显示了系统是如何把它们分类到不同的屏幕配置里的。有些屏幕分辨率并不在下面的列表上,但系统仍会把它们归入下列的某一个类型中。

低密度(120),ldpi
中密度(160),mdpi
高密度(240),hdpi
屏幕
·QVGA240×320),2.63.0


普通屏幕
·WQVGA240×400),3.23.5
·FWQVGA240×432),3.53.8
·HVGA320×480),3.03.5
·WVGA480×800),3.34.0
·FWVGA480×854),3.54.0
屏幕

·WVGA480×800),4.85.5
·FWVGA480×854),5.05.8


如上表所示,所有分辨率的屏幕,都围绕在基准屏幕周围,而基准屏幕在分类中,为“正常”尺寸,与“中”密度。之所以用HVGA屏幕作为基准屏幕,是因为所有针对Android 1.5或更早的程序都是针对这片屏幕所写的(因为只支持这一片),比如T-Mobile G1
虽然系统支持上面9种不同配置的屏幕,但你并不一定需要为它们都提供各自不同的资源。系统已经提供了足够鲁棒(就是在各种恶劣环境下正常工作,对环境变化不敏感)的兼容特性,用于在各种不同的屏幕上良好显示你的程序。这在下面的文档中会详细描述,如果你需要更多的资料,请查看“与屏幕无关的最佳实践”。

转载于:https://my.oschina.net/billowworld/blog/61195

相关文章:

010 并发的三个特性

一 . 概述 在之前,我们使用synchronized关键词解决了原子性的操作,本节我们分析一个JVM内存模型导致的另外的两个问题. 二 . 可见性 为了加速线程的运行的速度,JVM的内存模型中设置了线程栈中的缓存,当一个线程使用了堆内存的数据的时候,首先会将这个数据缓存到线程栈之中, 当这…

LeetCode: Longest Consecutive Sequence

想到map了&#xff0c;可惜没想到用erase来节省空间&#xff0c;看了网上答案 1 class Solution {2 public:3 int longestConsecutive(vector<int> &num) {4 // Start typing your C/C solution below5 // DO NOT write int main() function6 …

python做测试书籍推荐_学习pytest应该观看的书籍?

这本书有中文版了pytest是动态编程语言Python专用的测试框架&#xff0c;它具有易于上手、功能强大、第三方插件丰富、效率高、可扩展性好、兼容性强等特点。《pytest测试实战》深入浅出地讲解了pytest的使用方法&#xff0c;尤其是具有特色的fixture的用法。作者通过丰富的测试…

路由器、路由与路由表

2019独角兽企业重金招聘Python工程师标准>>> 路由器、路由与路由表 路由器就是一台网络设备&#xff0c;它配备多个网络接口卡(NIC)&#xff0c;能利用它的网络知识正确转发入口流量。 决定一个入口封包应当送给本地主机还是转发所需要的信息&#xff0c;以及在转发…

Hadoop虚拟机的jdk版本和本地eclipse的版本不一致怎么办

在本周学习Hadoop遇到了一个问题&#xff0c;困扰了半天&#xff0c;本人在安装Hadoop时是按照视频来的&#xff0c;结果发现Hadoop上的jdk版本和本地eclipse的版本不一致&#xff0c;导致本地的程序到处jar包传到虚拟机上运用Hadoop不能正常运行&#xff0c;如果你遇到相同的问…

操作符和表达式

一. 操作符 1. 算术操作符 - * / % 除了%之外其余的几个操作符既可以用于计算整型也可以用于计算浮点型数据&#xff0c;%只能计算整型数据&#xff0c;得到的结果是余数 2. 移位操作符 << 左移位操作符 >> 右移位操作符 <<左移…

kuayu react_react跨域解决方案

react跨域解决方案1.开发环境:reactaxioselement2.电脑系统:windows10专业版3.在使用react开发的过程中,我们总是会遇到跨域的问题,下面我来分享一下,在react中跨域处理方法!4.我使用的是axios向后台发送请求,安装axios:npm i axios --save5.安装代理中间件(http-proxy-middlew…

HDU 1429 胜利大逃亡(续) (BFS+位压缩)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3309 Accepted Submission(s): 1063 Problem DescriptionIgnatius再次…

Ext fucionchart插件

http://code.google.com/p/uxmedia/downloads/list转载于:https://www.cnblogs.com/jerome-rong/archive/2012/06/09/2543565.html

前端 ----jQuery的动画效果

03-jQuery动画效果 jQuery提供的一组网页中常见的动画效果&#xff0c;这些动画是标准的、有规律的效果&#xff1b;同时还提供给我们了自定义动画的功能。 显示动画 方式一&#xff1a; $("div").show(); 解释&#xff1a;无参数&#xff0c;表示让指定的元素直接显…

结构和联合--结构体内存和位段内存开辟规则

一. 结构的基本知识 聚合数据类型能够存储多个数据&#xff0c;C语言提供了两种类型的聚合数据类型&#xff0c;数组和结构。数组是相同的数据&#xff0c;结构是不同类型的数据聚合。结构也是一些值得集合&#xff0c;这些值成为它的成员&#xff0c;每个结构都有它的名字&a…

antd自定义分页器_自定义分页器

classPagination(object):def __init__(self, current_page, all_count, per_page_num10, pager_count11):"""封装分页相关数据:param current_page: 当前页:param all_count: 数据库中的数据总条数:param per_page_num: 每页显示的数据条数:param pager_count:…

.net实现跨页面传值

//一般用于向php&#xff0c;jsp等传值&#xff0c;因为跨语言session等不能共用&#xff0c;只有通过post提交 //下面演示的是服务器端控件提交 PostBackUrl"WebForm3.aspx"//这个页面只需要修改控件属性就能把值传给下一页面 protected void Page_Load(object send…

进程的同步、互斥以及PV原语

在处理进程间的同步与互斥问题时&#xff0c;我们离不开信号量和PV原语&#xff0c;使用这两个工具的目的在于打造一段不可分割不可中断的程序。应当注意的是&#xff0c;信号量和PV原语是解决进程间同步与互斥问题的一种机制&#xff0c;但并不是唯一的机制。 信号量&#xff…

ListT中,Remove和RemoveAt区别

Remove删除的是匹配的第一项。比如你的list里面有2个相同的项。那么就删除第一个。后面的不删除&#xff0c;找不到元素和删除失败都返回falseRemoveAt是删除索引下的项 转载于:https://www.cnblogs.com/mcyushao/p/9526208.html

vue 如何处理两个组件异步问题_Vue动态异步组件实现思路及其问题

前言&#xff1a;在vue官方资料中&#xff0c;我们可以可以很学会如何通过vue构建“动态组件”以及“异步组件”&#xff0c;然而&#xff0c;在官方资料中&#xff0c;并没有涉及到真正的“动态异步”组件&#xff0c;经过大量的时间研究和技术分析&#xff0c;我们给出目前比…

[转载] 七龙珠第一部——第004话 掳人的妖怪——乌龙

转载于:https://www.cnblogs.com/6DAN_HUST/archive/2013/04/07/3003566.html

如何解决资料下载下来为index.html和PHP文件的问题?

最近很多Down友反映&#xff0c;在下载中心下载资料时&#xff0c;明明是pdf、rar、zip格式的文件&#xff0c;下载完后怎么就变成index.html、php格式的文件了&#xff1f;既浪费了下载豆&#xff0c;文件还不能用&#xff0c;心疼啊&#xff01;这是因为下载系统是动态获取的…

给大家推荐8个SpringBoot精选项目

前言 2017年&#xff0c;曾在自己的博客中写下这样一段话&#xff1a;有一种力量无人能抵挡&#xff0c;它永不言败生来倔强。有一种理想照亮了迷茫&#xff0c;在那写满荣耀的地方。 如今2018年已过大半&#xff0c;虽然没有大理想抱负&#xff0c;但是却有自己的小计划。下面…

点击Notification正确回调到之前已经放置在后台的Task中的对应Activity,而不是创建它的一个新实例...

NotificationManager notificationManager (NotificationManager)getSystemService(NOTIFICATION_SERVICE);Notification notification new Notification(R.drawable.logo_icon_16,"移动营销", System.currentTimeMillis());Intent intent new Intent(Intent.ACTI…

函数返回类的对象与拷贝构造函数

C中&#xff0c;如果我们在一个函数中&#xff0c;定义了一个类的对象&#xff0c;然后返回这个对象&#xff0c;在main函数中用一个对象去接受这个返回的对象的时候&#xff0c;这里面参与的函数调用大家可能不熟悉&#xff0c;这里通过程序和注释的方式给大家讲解一下。编译的…

ai条码插件免安装_ai条码插件2款下载|Barcode Toolbox插件+Barcode条码插件下载 - 偶要下载站...

本次一次性打包两款ai条码插件和大家分享&#xff0c;分别是Barcode Toolbox插件和Barcode脚本插件&#xff0c;支持Illustrator CS5~CC2015的条形码脚本&#xff01;这两个插件不是一个插件&#xff0c;是有区别的两个插件。Barcode Toolbox是AI的一个非常有用的生成条码的插件…

GridView的DataKeyNames属性 转载的

偶今天用到这个了,转载 "事在人为"楼主的,原文地址: http://www.cnblogs.com/andhm/archive/2010/05/07/1730024.html DataKeyNames表示主键的列名&#xff0c;可以通过GridViewEntity.DataKeys[RowIndex]["ColumsName"]来获取他的值&#xff0c;当然它是…

反射 -- 通过字符串操作对象中的成员

getattr()setattr()hasattr()delattr()class C:def __init__(self, name):self.name namedef f(self):return Pythonobj C(Pyhton) get_name getattr(obj, name) get_func getattr(obj, f) get_func() hasattr(obj, name) setattr(obj, age, 10) delattr(obj, name)转载于:…

android默认exported_android:exported 属性详解

转自http://blog.csdn.net/watermusicyes/article/details/46460347昨天在用360扫描应用漏洞时&#xff0c;扫描结果&#xff0c;出来一个Android:exported属性&#xff0c;其实之前根本不知道这个属性&#xff0c;更不知道这个属性用来干嘛的&#xff0c;详情见下图&#xff1…

Chipset

Chipset 芯片组是一组集成电路&#xff08;芯片&#xff09;用于管理计算机处理器、内存和外设的数据流&#xff0c;通常位于主板上。 Northbridge (Memory Controller Hub) 北桥用来处理高速信号&#xff0c;负责CPU、RAM、AGP和PCI Express之间的通信。 Southbridge (I/O Con…

正确设置php-fpm和nginx防止网站被黑

2019独角兽企业重金招聘Python工程师标准>>> 核心总结&#xff1a;php-fpm 子进程所使用的用户&#xff0c;不能是网站文件所有者。 凡是违背这个原则&#xff0c;则不符合最小权限原则。 根据生产环境不断反馈&#xff0c;发现不断有 php网站被挂木马&#xff0c;绝…

一个数字键盘引发的血案——移动端H5输入框、光标、数字键盘全假套件实现...

https://juejin.im/post/5a44c5eef265da432d2868f6 为啥要写假键盘&#xff1f; 还是输入框、光标全假的假键盘&#xff1f; 手机自带的不用非得写个假的&#xff0c;吃饱没事干吧&#xff1f; 装逼&#xff1f;炫技&#xff1f; 宝宝也是被逼的&#xff0c;宝宝也很委屈~.~ …

姿态检测 树莓派_怎样在树莓派上轻松实现深度学习目标检测?

原标题&#xff1a;怎样在树莓派上轻松实现深度学习目标检测&#xff1f;雷锋网按&#xff1a;本文为 AI 研习社编译的技术博客&#xff0c;原标题 How to easily Detect Objects with Deep Learning on Raspberry Pi&#xff0c;作者为 Sarthak Jain。翻译 | 小哥哥 狒狒 校对…

Linux目录读写和可执行权限

一 . 进入目录权限如果我在普通用户下创建了一个目录f1&#xff0c;然后使用chomd u-rwx,g-rwx,o-rwx之后&#xff0c;我在普通用户下想进入f1目录&#xff0c;权限不允许。然后我切换到超级用户下&#xff0c;再次尝试进入到f1目录&#xff0c;这个时候允许进入。然后回到普通…