Android 屏幕适配

来源:互联网 发布:宾馆收费系统源码 编辑:程序博客网 时间:2024/06/08 13:50

android屏幕适配的整体思路

  • 开发前,选取一款主流屏幕进行开发,比如现在的1280*720;
  • 开发过程中,遵循一些原则:不用AbsoluteLayout(绝对布局), 多用相对布局&线性布局(权重), 要用dp,不用px
    dp和px的关系:dp = px/设备密度
    320*480的设备密度为1.0, 480*800的设备密度为1.5, 1280*720的设备密度为2.0。
    // 获取设备密度
    float density = getResources().getDisplayMetrics().density;
    System.out.println("设备密度:" + density);
  • 开发后期,再在不同的屏幕上测试(480*800 、1920*1080)。

具体主要有如下几种适配

  1. 图片适配(不是很常用)
    • 在不同的drawable文件夹下,放置几套不同大小的图片。
    • 缺点:会导致apk体积过大。
    • 如果图片非常重要,比如app的logo,这时可以在不同的drawable下放置几张不同大小的logo图片
  2. 布局适配(不是很常用)
    • 在res目录下,创建不同布局的layout文件夹。比如要适配480*800的屏幕,就建立layout-800x480的文件夹
    • 缺点:不利于后期维护,一旦布局需要改动一丁点,将是一个浩大的工程。
  3. 尺寸适配(很常用)
    • 在res目录下,创建不同的values文件夹。比如要适配1280*720的屏幕,就建立values-1280x720文件夹,在该文件夹下,创建dimens.xml文件,在文件里面设置尺寸。
  4. 权重适配(很常用)
    • android:weightSum=”3” android:weight=”1”
    • 在要平均分配屏幕宽度或高度时常用权重,比如一般app的底部标签的布局。
  5. 代码适配
    • int width = getWindowManager().getDefaultDisplay().getWidth();
      int height = getWindowManager().getDefaultDisplay().getHeight();
    • 拿到屏幕的宽高,就可以进行相关适配了。

屏幕适配的工具类

public class DisplayUtil {      /**      * 将px值转换为dip或dp值,保证尺寸大小不变      *       * @param pxValue      * @param scale      *            (DisplayMetrics类中属性density)      * @return      */      public static int px2dip(Context context, float pxValue) {          final float scale = context.getResources().getDisplayMetrics().density;          return (int) (pxValue / scale + 0.5f);      }      /**      * 将dip或dp值转换为px值,保证尺寸大小不变      *       * @param dipValue      * @param scale      *            (DisplayMetrics类中属性density)      * @return      */      public static int dip2px(Context context, float dipValue) {          final float scale = context.getResources().getDisplayMetrics().density;          return (int) (dipValue * scale + 0.5f);      }      /**      * 将px值转换为sp值,保证文字大小不变      *       * @param pxValue      * @param fontScale      *            (DisplayMetrics类中属性scaledDensity)      * @return      */      public static int px2sp(Context context, float pxValue) {          final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;          return (int) (pxValue / fontScale + 0.5f);      }      /**      * 将sp值转换为px值,保证文字大小不变      *       * @param spValue      * @param fontScale      *            (DisplayMetrics类中属性scaledDensity)      * @return      */      public static int sp2px(Context context, float spValue) {          final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;          return (int) (spValue * fontScale + 0.5f);      }  }  
0 0
原创粉丝点击