Android程序对不同手机屏幕分辨率自适应的总结

摘要:
各种Android操作系统的手机简直就是琳琅满目,屏幕分辨率的差异可想而知。这样的反比属性对任何分辨率下的手机都是合适的。其中320x240是你手机屏幕的分辨率,根据你手机屏幕的情况做不同的命名,例如values- 800x480。那么系统就会自动根据你手机屏幕的分辨率去调用响应的文件夹。

各种Android操作系统的手机简直就是琳琅满目,屏幕分辨率的差异可想而知。目前比较主流的有WVGA=800x480,HVGA=480x320,另外的还有QVGA=320x240。当然还有魅族M9的DVGA=960x640,还有蛋疼的摩托罗拉的FWVGA=854x480。

其实,在你layout的xml文件中,编写的时候是不是用了许多的padding呢?如果是,那你就蛋疼了。因为这样的布局永远是无法适应所有手机屏幕的。

正确的做法应该是使用的是weight属性。将你控件的layout中的width、height设置为fill-parent,不要使用wrap——content。因为wrap-content的大小是不固定的。而weight(权重)这个属性很好的解决了这个问题。

当包裹在控件外面的Layout的width、height属性都设置为fill-parent时,可以利用weight的反比特性。即如果控件A设置weight为5,控件B设置weight为7,那么A所占的空间为5/(5+7),B所占的空间为7/(5+7)。这样的反比属性对任何分辨率下的手机都是合适的。

当然,字体就不行了。那怎么保证字体能够跟布局一样能够自适应呢?
呵呵,很简单,就是在你的res文件夹中创建一个文件夹,叫做values-320x240。其中320x240是你手机屏幕的分辨率,根据你手机屏幕的情况做不同的命名,例如values- 800x480。在该文件夹下创建一个dimens.xml文件,定义各种字体的大小。那么系统就会自动根据你手机屏幕的分辨率去调用响应的文件夹。

另外,值得提醒的是,记得在你默认的values文件下的dimens.xml文件中也要写上相应的字体大小哦,因为当系统无法认识你手机屏幕大小的时候,它会自动去找你默认文件中的

东西,没有写的话程序会崩溃。

************************************************************分割线************************************************************

在看下面内容之前首先请看你SDK文档中以下这篇文章

Android程序对不同手机屏幕分辨率自适应的总结第1张

其实google在分辨率适应性的东西已经写的很清楚了,只是我们很多人没去看而已

以下是结论:
屏幕分辨率:1024x600
density:1(160)
文件夹:values-mdpi-1024x600
屏幕分辨率:1024x600
density:1.5(240)
文件夹:values-hdpi-683x400由1024/1.5600/1.5得到,需要四舍五入。
屏幕分辨率:800x480
density:1(160)
文件夹:values-mdpi-800x480
屏幕分辨率:800x480
density:1.5(240)
文件夹:values-hdpi-533x320由800/1.5480/1.5得到,需要四舍五入。
以此类推
一般情况下需要创建出values 、values-mdpi 、 values-hdpi文件夹,以备在一些没有规定的尺寸屏幕上找不到资源的情况。
然后在里面使用不同的dimens文件,Layout中不要使用显示的数字,所有的尺寸定义全都援引dimens里面的内容。
这样能够保证深度UI定制的情况
另外在工程的default.properties中如果split.density=false,则分辨率适配的时候文件夹命名不需要与scale相除


屏幕分辨率:800x480
density:1.5(240)
文件夹:values-hdpi-800x480

************************************************************分割线************************************************************

关于dimens

位置:res\values
单位:px Pixel 以画面的像素为单位;
in Inches以画面的多少英寸为单位;
mmMillimeter以画面的多少毫米为单位;
pt Points 一点为1/72英寸;
dp或dipDensity-indepentdent 为160dpi屏幕的一个pixel;
ap Scale-independent Pixels 随屏幕尺寸改变的一个pixel;

最后总结就是要想不求人 ,英语得过关!!!

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

原帖地址:http://www.cnblogs.com/tianjian/archive/2011/11/25/2262866.html

免责声明:文章转载自《Android程序对不同手机屏幕分辨率自适应的总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇springboot之定时任务语音信号处理(声速,回声,音高,界面设计PyQt5)_Python语言下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jmeter之认识元器件及功能 大杂烩

一、线程组 线程组是一个测试计划的开始点。在一个测试计划中的所有元件都必须在某个线程组下; 1.1 基础线程组Thread Group Ramp_up Periond值是预期Jmeter用于启动所有线程的时间;若是线程数过多,则会>该值启动完所有线程; 如下图,预期5s 启动200个线程;可以通过"用表格查看结果"查看每个线程的启动时间; 1.2...

Adobe photoshop CS6 + 破解补丁

软件位置:  链接:https://pan.baidu.com/s/1KeKRS0yIMfeEbOJQ-ilo0g 破解流程 首先断开网络连接 (如果不断网安装过程中会要求登陆)打开Photoshop CS6文件夹里的Adobe CS6文件夹双击set-up.exe 进行安装询问[安装]或[试用]时 选择试用用试用方式不需要输入序列号 安装完成后打开一次...

打开chrome 应用商店

https://zhuanlan.zhihu.com/p/113207558 欢迎来到教学星球,我们一起终生学习。今天我们来说说如何访问谷歌网上应用商店。有了谷歌网上应用商店之后,才能为你的浏览器各种赋能。 首先需要安装一个谷歌浏览器,下载地址:https://www.google.cn/intl/zh-CN/chrome/ 安装好谷歌浏览器之后,下载一个...

Docker从入门到放弃

  为什么要学习 docker 呢?深有体会,由于一些原因只能在他人电脑上搭建环境,明明在自己电脑上的程序跑的好好的,在他人的电脑上就是死活出错。折磨人呀!!!!!可是能怎么办,工作还得继续,曲线救国呗,折腾了一天终于搞好了,那么以后呢?想到了之前搭建靶机时候用到的docker,时间长了也忘了,准备好好梳理学习入门一波。《十分感谢大神的文章,本文基于大神的...

OpenWrt包管理软件opkg的使用(极路由)

说明: 1、OpenWrt本身系统没什么问题,关键点是一些路由器尝试的限制,比如一些厂商设置成内存分区为只读,那么这个安装软件就变得没什么意义了。 2、opkg的操作有点反人类,正常步骤是查询,安装;而opkg在一些厂商的限制下需要update,然后download,最后install;且有时会安装在tmp区,重启会没有。 常用安装步骤: 如果想要安装一个...

电源设计Poe 以太网供电方案

按照IEEE802.at Poe 标准 以太网供电系统架构是由PSE 和PD构成。 PSE(power sourcing equipment)供电端设备,它既为以太网客户端供电,同时也是整个Poe的供电管理者。 PD(power device) 接受供电的设备,作为PSE的负载,即: Poe系统的服务端 两者基于IEEE802.at协议,并且以此为根据,实...