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