Android屏幕自适应方法小结

这里是本人第一篇小文,目的主要在于记录自己在Android学习过程中的点滴,俗话说好记性不如烂笔头,记上一笔,也当是成果的记录,别搞到后来同样的问题还要去查询。

 

废话不说,进入正文。

 

1. 为什么会有这个问题的出现

       相信各位Android开发爱好者都知道,由于OEM(设备制造商)之间的竞争,各种Android操作系统的手机和平板电脑型号各异,屏幕分辨率的差异可想而知。为了能够让我们辛苦写出的程序可以在不同的机型上漂亮健康的跑起来,让UI适应不同分辨率的屏幕,也自然成为了爱好者们为之头痛的问题。

 

2. Android系统为我们提供了什么途径

      (1android支持density的版本

Android1.6版本开始支持density(对应API Level 4)

      (2density

density值表示每英寸有多少个显示点,它的单位是dpidot per inch,通常屏幕大时,density就大,屏幕小时,density就小。

      (3hdpimdpildpi
在之前的版本中,只有一个drawable,而2.1版本中有drawable-mdpidrawable-ldpidrawable-hdpi三个,这三个主要是为了支持多density

  drawable- hdpidrawable- mdpidrawable-ldpi的区别:
    (1)drawable-hdpi里面存放高分辨率的图片,WVGA (480x800),FWVGA (480x854)
  (2)drawable-mdpi里面存放中等分辨率的图片,
HVGA (320x480)
  (3)drawable-ldpi里面存放低分辨率的图片,
QVGA (240x320)
  在不同的文件夹下所放的图片像素大小也不相同,按hdpimdpildpi  =  643来切图处理。也可以按照三个文件夹默认的ic_launcher的图标比例来处理。

     (4不同的layout

res目录下创建不同的layout文件夹,比如layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.Java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。

 

3. 我们自己该怎么处理

     (1)关于布局

       在layoutxml文件中,编写的时候不建议过多的使用padding属性,因为这样的布局永远是无法适应所有手机屏幕的。正确的做法是建议使用weight属性。
       
过程很简单:首先,将你控件的layout中的widthheight设置为fill-parent,不要使用wrap——content。因为wrap-content的大小是不固定的。而weight(权重)这个属性很好的解决了这个问题。
      
当包裹在控件外面的Layoutwidthheight属性都设置为fill-parent时,可以利用weight的反比特性。即如果控件A设置weight9,控件B设置weight20,那么A所占的空间为20/9+20),B所占的空间为9/9+20)。这样的反比属性对任何分辨率下的手机都是合适的。

     (2)关于字体

       在你的res文件夹中创建一个文件夹,叫做values-800x480。在该文件夹下创建一个dimens.xml文件,定义各种字体的大小。那么系统就会自动根据你手机屏幕的分辨率去调用响应的文件夹。
      
 另外,值得提醒的是,记得在你默认的values文件下的dimens.xml文件中也要写上相应的字体大小哦,因为当系统无法认识你手机屏幕大小的时候,它会自动去找你默认文件中的东西,没有写的话程序会崩溃。

你可能感兴趣的:(Android屏幕自适应方法小结)