android开发笔记之APP在不同的项目中适配(支持多种屏幕)

来源:互联网 发布:行楷 知乎 编辑:程序博客网 时间:2024/05/26 09:55

    why:

    最近在做一个APP的不同项目,不同屏幕的适配工作,发现我们以前自己写的代码,确实是不具备通用和可移植性,所以写下了下面的这些,希望以后写的代码具有更好的匹配性,能支持不同的屏幕,有更好的效果。

   How:

1.为不同屏幕提供不同的图片

  res/drawable        

res/drawable-xhdpi       res/drawable-xhdpi-1280x720     (特定的屏幕1280*720)

res/drawable-hdpi       res/drawable-hdpi-960x540         (特定的屏幕960*540)

res/drawable-mdpi 

res/drawable-ldpi 


res/drawable-land   (横屏图片)

res/drawable-land-ldpi   (横屏图片)


2.为不同屏幕提供不同的布局文件

  res/layout        

res/layout-xhdpi       res/layout-xhdpi-1280x720     (特定的屏幕1280*720)

res/layout-hdpi       res/layout-hdpi-960x 540         (特定的屏幕960*540)

res/layout-mdpi 

res/layout-ldpi 


res/layout-land   (横屏布局文件)

res/layout-land-ldpi   (横屏布局文件)


3.为不同屏幕提供不同的value,特别是dimens.xml的运用

 res/values        

res/values-xhdpi /dimens.xml      res/values-xhdpi-1280x720/dimens.xml     (特定的屏幕1280*720)

res/values-hdpi/dimens.xml       res/values-hdpi-960x540/dimens.xml         (特定的屏幕960*540)

res/values-mdpi /dimens.xml

res/values-ldpi /dimens.xml


res/values-land/dimens.xml   (横屏values)

res/values-land-ldpi /dimens.xml  (横屏values)


使用样例:

(1)字体大小匹配

Dimens.xml (res\values-hdpi):

     <dimen name="dialpad_fragment_cancel_text_size">45sp</dimen>

Dimens.xml (res\values-hdpi-854x480):

        <dimen name="dialpad_fragment_cancel_text_size">25sp</dimen>


代码读取:

      float size = getResources().getDimensionPixelSize(R.dimen.dialpad_fragment_cancel_text_size);


(2)间距匹配

Dialpad_fragment.xml (res\layout-hdpi-854x480):             

      android:layout_marginTop="@dimen/konka_text_callerLoc_margintop"
Dialpad_fragment.xml (res\layout-xhdpi-1280x720):             

      android:layout_marginTop="@dimen/konka_text_callerLoc_margintop"


Dimens.xml (res\values):

     <dimen name="konka_text_callerLoc_margintop">45dip</dimen>


Dimens.xml (res\values-hdpi):

      <dimen name="konka_text_callerLoc_margintop">33dip</dimen>


    Best Practices:

1.在布局文件中合理使用 wrap_content, fill_parent,  单位考虑使用dp

2.布局尽量使用相对布局(  RelativeLayout),不要使用绝对布局(AbsoluteLayout)

3.在代码中,不要使用 hard-coded pixel 值。

eg:  

myView.getWidth()



参考资料:

1.http://developer.android.com/guide/practices/screens_support.html