Android屏幕自适应方法小结
来源:互联网 发布:mobi域名2017最新消息 编辑:程序博客网 时间:2024/05/17 06:26
这里是本人第一篇小文,目的主要在于记录自己在Android学习过程中的点滴,俗话说好记性不如烂笔头,记上一笔,也当是成果的记录,别搞到后来同样的问题还要去查询。
废话不说,进入正文。
1. 为什么会有这个问题的出现
相信各位Android开发爱好者都知道,由于OEM(设备制造商)之间的竞争,各种Android操作系统的手机和平板电脑型号各异,屏幕分辨率的差异可想而知。为了能够让我们辛苦写出的程序可以在不同的机型上漂亮健康的跑起来,让UI适应不同分辨率的屏幕,也自然成为了爱好者们为之头痛的问题。
2. Android系统为我们提供了什么途径
(1)android支持density的版本
Android从1.6版本开始支持density(对应API Level 4)
(2)density
density值表示每英寸有多少个显示点,它的单位是dpi:dot per inch,通常屏幕大时,density就大,屏幕小时,density就小。
(3)hdpi、mdpi、ldpi
在之前的版本中,只有一个drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多density。
drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:
(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)
(3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)
在不同的文件夹下所放的图片像素大小也不相同,按hdpi:mdpi:ldpi = 6:4:3来切图处理。也可以按照三个文件夹默认的ic_launcher的图标比例来处理。
(4)不同的layout
在res目录下创建不同的layout文件夹,比如layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.Java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。
3. 我们自己该怎么处理
(1)关于布局
在layout的xml文件中,编写的时候不建议过多的使用padding属性,因为这样的布局永远是无法适应所有手机屏幕的。正确的做法是建议使用weight属性。
过程很简单:首先,将你控件的layout中的width、height设置为fill-parent,不要使用wrap——content。因为wrap-content的大小是不固定的。而weight(权重)这个属性很好的解决了这个问题。
当包裹在控件外面的Layout的width、height属性都设置为fill-parent时,可以利用weight的反比特性。即如果控件A设置weight为9,控件B设置weight为20,那么A所占的空间为20/(9+20),B所占的空间为9/(9+20)。这样的反比属性对任何分辨率下的手机都是合适的。
(2)关于字体
在你的res文件夹中创建一个文件夹,叫做values-800x480。在该文件夹下创建一个dimens.xml文件,定义各种字体的大小。那么系统就会自动根据你手机屏幕的分辨率去调用响应的文件夹。
另外,值得提醒的是,记得在你默认的values文件下的dimens.xml文件中也要写上相应的字体大小哦,因为当系统无法认识你手机屏幕大小的时候,它会自动去找你默认文件中的东西,没有写的话程序会崩溃。
- Android屏幕自适应方法小结
- Android开发屏幕自适应方法
- Android自适应屏幕的实现方法
- android屏幕自适应的四种方法
- Android屏幕自适应的四种方法
- Android自适应不同屏幕几种方法
- 【Android】屏幕自适应4种方法
- Android自适应不同屏幕几种方法
- pc端屏幕自适应小结
- android 屏幕自适应问题
- android:屏幕自适应问题
- android屏幕自适应研究
- [Android]屏幕自适应布局
- android 屏幕自适应
- android屏幕自适应研究
- android:屏幕自适应
- android屏幕自适应
- android 自适应屏幕
- C程序内存结构
- 目送着潺潺的流水
- lucene 高级搜索
- 内核移植(详细版)
- 再次写给我们这些浮躁的程序员
- Android屏幕自适应方法小结
- 我们是一群和平年代充满浮躁与抱怨的程序员
- 靠着自己的双膝
- jquery 在提交表单的时候验证checkbox是否选中
- PL/SQL学习三
- 比较C++中的4种类型转换方式
- Erlang自学笔记(一)
- 条款1:尽量用const和inline而不用#define
- Spring学习总结(二)Spring容器