Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸
一、引言
Android的开源使厂商无需自行研发OS,大大降低了研发、生产的成本,使得Android平板品牌如雨后春笋般爆发,山寨机厂商们似乎又找到了一丝希望。与此同时带来的是广大开发者的苦不堪言,各种神奇的小板儿考验着app的兼容性,各种定制的rom不经意间就让app崩溃,光是界面上的调整就已经够你喝一壶了,是不?
二、适配可行性
早在Android设计之初就考虑到了这一点,为了让app适应标准or山寨屏幕,google已经有一套成熟的解决方案。其中,有这么几个指标需要注意:
(1)屏幕尺寸:单位inch,指的是屏幕对角线长度。
(2)屏幕密度:单位dpi,指的是每inch上可以显示多少像素点即px。
(3)屏幕分辨率:单位px * px,指的是一屏显示多少像素点。
(4)屏幕无关像素:单位dp/dip,指的是自适应屏幕密度的像素,用于指定控件宽高。
(5)刻度无关像素:单位sp,指的是自适应字体的像素,用于指定文字大小。
以我自己的Haier W910超级战舰(宽高比16:9)为例,上述单位的换算如下:
已知数据:屏幕尺寸4.5, 分辨率1280 * 720, 屏幕密度320
(1)16:9的4.5寸屏幕由勾股定理计算其高约为3.9寸,宽约为2.2寸
(2)则竖向dpi为1280 / 3.9 ≈ 328, 横向dpi为720 / 2.2 ≈ 327
(3)工业上切割液晶板时取整为320
那么既然dpi是自适应屏幕密度的,与px之间又是如何换算呢:
120dpi(ldpi低密度屏) 1dp = 0.75px (由于像素点是物理点,所以用2个像素点来显示3个dp的内容)
160dpi(mdpi中密度屏) 1dp = 1px
213dpi(tvdpi电视密度屏) 1dp = 1.33px
240dpi(hdpi高密度屏) 1dp = 1.5px
320dpi(xhdpi极高密度屏) 1dp = 2px
由上述分析结果可知,控件使用dp,文字使用sp即可满足自适应的需求。
三、适配方案
根据目前的调查,在市面上的平板,基本上属于mdpi和hdpi的,少数属于tvdpi(如google出的nexus7),所以我们选择这三种密度考虑适配;此外手机应用大多数都是竖屏使用,但平板作为娱乐性的一款产品,横竖屏均有使用的时候,所以我们还需要考虑到屏幕状态进行适配;最后考虑到有的rom会将虚拟键计算到屏幕尺寸里,还要考虑到虚拟键所占用的长宽。
那么如何根据这三个属性来进行适配呢?Android在资源文件values用文件名的方式提供了限定符可以帮助我们判断上述情况,限定符(mdpi,tvdpi,hdpi)可以帮助我们判断屏幕密度,限定符(land,port)可以帮助我们区分屏幕横竖屏状态,而限定符(1024x600...)可以适配计算虚拟键或者不计算虚拟键的屏幕,限定符的详细说明请参见Android SDK文档中开发者指南的Supporting Multiple Screens话题。
最终适配文件夹如下图所示:

注1:分辨率限定符的匹配是向下匹配,如果没有values-land-mdpi-1024x552,比如,分辨率values-land-mdpi-1024x600的屏幕,当rom不把虚拟键计算到屏幕尺寸时,实际显示的屏幕应该是values-land-mdpi-1024x552,无法适配到values-land-mdpi-1024x600,那这样就可能适配到下一级,比如values-land-mdpi-800x480,但是现在的平板已经没有这么低的分辨率了,所以是配到无限定符的values-mdpi里,造成界面显示上的瑕疵。
注2:由于分辨率限定符的匹配是向下匹配,所以如果有非主流mdpi屏幕不能精确适配到上述指定值时,values-mdpi至少可以保证app运行时不至于崩溃,同理values可以保证ldpi屏幕的平板不会因生成view而又取不到相应值而崩溃。
Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸的更多相关文章
- 微信jssdk,实现多图上传的一点心得
一.首先在common.js里封装一个函数,在需要调用jsSDK的页面引用此方法即可实现微信的信息配置function signatureJSSDK() { var url = window.loca ...
- 采用CSS3 Media Query技术适应Android平板屏幕分辨率和屏幕像素密度
采用HTML5在开发移动应用程序满足各种需求Android分辨率和屏幕的平板设备密度,这是非常麻烦的过程,最终的解决方案是使用css media query,匹配相同的时间分辨率和屏幕像素密度.上进行 ...
- 创建支持多种屏幕尺寸的Android应用
Android涉及各种各样的支持不同屏幕尺寸和密度的设备.对于应用程序,Android系统通过设备和句柄提供了统一的开发环境,大部分工作是校正每一个应用程序的用户界面到它显示的屏上.与此同时,系统提供 ...
- 创办支持多种屏幕尺寸的Android应用
创建支持多种屏幕尺寸的Android应用 Android涉及各种各样的支持不同屏幕尺寸和密度的设备.对于应用程序,Android系统通过设备和句柄提供了统一的开发环境,大部分工作是校正每一个应用程序的 ...
- Android屏幕适配全攻略(最权威的官方适配指导)屏幕尺寸 屏幕分辨率 屏幕像素密度 dpdipdpisppx mdpihdpixdpixxdpi
Android屏幕适配全攻略(最权威的官方适配指导)原创赵凯强 发布于2015-05-19 11:34:17 阅读数 153734 收藏展开 转载请注明出处:http://blog.csdn.net/ ...
- 设计兼容不同的屏幕尺寸的Android界面
Android的屏幕类型有几百种不同的尺寸,从小型的手机到大型的电视机.因此要使我们的应用程序兼容不同屏幕尺寸,才可以让我们的应用提供给更多的用户使用. 一.支持不同的屏幕尺寸 1.使用"w ...
- [bug]android monkey命令在Android N和Android O上的一点差异发现
最近再调试这个统计FPS的代码,发现代码在android N上可以正常运行,但在android O上却运行不了,拼了命的报错,给出的提示就是 ZeroDivisionError: division b ...
- android屏幕适配的全攻略--支持不同的屏幕尺寸适配平板和手机
一. 核心概念与单位详解 1. 什么是屏幕尺寸.屏幕分辨率.屏幕像素密度? 屏幕分辨率越大,手机越清晰 dpi就是dot per inch dot意思是点,就是每英寸上面的像素点数 android原始 ...
- Android ORM 框架之 greenDAO 使用心得
前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM ...
随机推荐
- python 常用模块 Top200
名次 模块名称 被使用项目数 1 sys 7858 2 os 6983 3 re 5663 4 time 5268 5 random 3339 6 datetime 3310 7 setuptools ...
- wireless tool 移植
在linux上调试wifi, 需要移植wireless tool进行验证,本文记录移植方法. 参考链接 http://www.cnblogs.com/zengjfgit/p/5601473.html ...
- OceanBase架构浅析(一)
http://www.cnblogs.com/LiJianBlog/p/4779934.html 简介 OceanBase是阿里集团研发的可扩展的关系数据库,实现了数千亿条记录.数百TB数据上的跨行跨 ...
- Windwos服务器远程桌面不能复制粘贴的解决方法
今天使用远程桌面连接登陆服务器,发现不能在本地电脑和远程服务器之间复制粘贴文件了,复制粘贴文本也不行. 网上搜了一下,主要有两种情况: 1.复制粘贴功能原本可以用,突然失灵了2.从头到尾都无法使用这个 ...
- Android onMeasure方法介绍
onMeasure方法在控件的父元素正要放置它的子控件时调用.它会问一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec和heightMeasureSpec. 它们 ...
- for循环求交集
for循环方式求交集 #!/usr/bin/env python #coding:utf-8 #取交集 #定义两个序列对象,求alist与blist对象的交集元素 alist = [2,9,3,4,5 ...
- 会员管理系统全部源代码(C#+EF+SQLite+Winforms实现)
会员管理系统全部源代码,VS2010开发,使用Ado.net实体框架EF,简化数据库访问层,并能方便的移植到其他数据库.利用数据绑定减少编码量,提高程序的可维护性和可读性.使用Winfoms方便快速界 ...
- web前端编写注意点
1.在语义不明显,既可以用 <P> 也可以用 <div> 的地方,尽量用 <P> ,因为 <P> 默认情况下有上下间隔,去样式后的可读性更好,对兼容特殊 ...
- VS2010--2013使用技巧及使用过程中遇到的问题
Microsoft Visual Studio 2010 --2013默认情况下是不显示代码的行号的,但是在编译出错时,可点击下面输出窗口中的错误提示进行定位.但是这样操作起来你有没有感觉到不方便呢. ...
- session跟cookies区别
Session和Cookie的使用总结: Session和cookie都是asp.Net中的内置对象,至于他们有什么区别,在这里就不在多说,现在来说说一些比较实用点的东西: 我们知道网站都有一个后台管 ...