Android屏幕自适应方法小结
2012-08-20 08:27
253 查看
这里是本人第一篇小文,目的主要在于记录自己在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文件中也要写上相应的字体大小哦,因为当系统无法认识你手机屏幕大小的时候,它会自动去找你默认文件中的东西,没有写的话程序会崩溃。
废话不说,进入正文。
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】屏幕自适应4种方法
- Android网页宽度自适应手机屏幕宽度的方法
- Android自适应屏幕的实现方法
- android 不相同分辨率不同尺寸和相同分辨率不同尺寸自适应屏幕解决方法
- Android自适应不同屏幕几种方法
- Android 中Webview 自适应屏幕 3种方法
- 解决 android 高低版本 webView 里内容 自适应屏幕的终极方法
- Android编程实现屏幕自适应方向尺寸与分辨率的方法
- 解决 android 高低版本 webView 里内容 自适应屏幕的终极方法
- Android中Webview自适应屏幕实现的三种方法
- android屏幕自适应4方法案例整合
- Android 关于处理手机屏幕自适应时,用到的主要方法
- Android自适应不同屏幕几种方法
- Android自适应不同屏幕几种方法
- 解决 android 高低版本 webView 里内容 自适应屏幕的终极方法
- Android开发屏幕自适应方法
- Android自适应屏幕的实现方法
- Android开发之屏幕大小自适应
- iframe自适应高度的多种方法方法小结