为了账号安全,请及时绑定邮箱和手机立即绑定

Android-获取屏幕宽高

标签:
Android
  • 类说明

    Provides information about the size and density of a logical display.
    提供合理显示的,有关大小和密度的信息。
  • 显示区域有2种描述方式

    • 应用程序的显示区域
      不包括了状态栏(刘海屏,水滴屏等),导航栏等系统UI所占用的空间

    • 实际显示区域
      包括了状态栏(刘海屏,水滴屏等),导航栏等系统UI所占用的空间

获取Display的方式


1.任意Context

    /**
     * Get Display
     * @param context Context for get WindowManager
     * @return Display
     */
    private static Display getDisplay(Context context) {
        WindowManager wm = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);        if (wm != null) {            return wm.getDefaultDisplay();
        } else {            return null;
        }
    }

2.限Activity

  • 通过Activity类型的Context,不仅可以通过Context的方式获取到WindowManager,还可以直接通过Activity的getWindowManager()获取到WindowManager对象,进而获取到Display对象。

  • 通常我们需要获取屏幕的信息都是为了布局,如果是出于布局目的推荐直接这种方式获取Activity

    /**
     * Get Display(限Activity类型的Context)
     * @param activity Activity for get WindowManager
     * @return Display
     */
    private static Display getDisplay(Activity activity) {        //WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
        WindowManager wm = activity.getWindowManager();        if (wm != null) {            return wm.getDefaultDisplay();
        } else {            return null;
        }
    }

3.结合上面2种方式(推荐)

    /**
     * Get Display
     * @param context Context for get WindowManager
     * @return Display
     */
    private static Display getDisplay(Context context) {
        WindowManager wm;        if (context instanceof Activity) {
            Activity activity = (Activity) context;
            wm = activity.getWindowManager();
        } else {
            wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        }        if (wm != null) {            return wm.getDefaultDisplay();
        }        return null;
    }

Display中的屏幕信息


1. 获取应用屏幕宽度
  • 通过Display的getWidth()方法,该方法在Android4.1(API16)已经被弃用,用Display的
    getSize(Point outSize)方法代替。

       @Deprecated
       private static int getScreenWidth(Context context) {       return getDisplay(context).getWidth();
       }
  • 通过Display的getSize(Point outSize)方法。

     private static int getScreenWidth(Context context) {
        Display display = getDisplay(context);    if (display == null) {        return 0;
        }
        Point point = new Point();
        display.getSize(point);    return point.x;
     }
2. 获取实际屏幕宽度(API19)
  • 通过Display的getRealSize(Point outSize)方法。

     private static int getScreenRealWidth(Context context) {
         Display display = getDisplay(context);     if (display == null) {         return 0;
         }
         Point outSize = new Point();
         display.getRealSize(outSize);     return outSize.x;
     }
3. 获取应用屏幕高度
  • 通过Display的getHeight()方法,该方法在Android4.1(API16)已经被弃用,用Display的
    getSize(Point outSize)方法代替。

     @Deprecated
     private static int getScreenHeight(Context context) {     return getDisplay(context).getHeight();
     }
  • 通过Display的getSize(Point outSize)方法。

     private static int getScreenHeight(Context context) {
        Display display = getDisplay(context);    if (display == null) {        return 0;
        }
        Point point = new Point();
        display.getSize(point);    return point.y;
     }
4. 获取实际屏幕的高度(API19)
  • 通过Display的getRealSize(Point outSize)方法。

     private static int getScreenRealHeight(Context context) {
          Display display = getDisplay(context);      if (display == null) {          return 0;
          }
          Point outSize = new Point();
          display.getRealSize(outSize);      return outSize.y;
      }

DisplayMetrics(推荐)


DisplayMetrics官方参考文献

  • 类说明

    A structure describing general information about a display, such as its size, density, and font scaling.
    描述一些显示信息,例如它的大小、密度和字体缩放。

获取DisplayMetrics的方式


1. Display
  • 准确来说这个方法是Display通过DisplayMetrics来获取信息,下面拿一个获取屏幕宽度举例

      private static int getScreenWidth(Context context) {
          DisplayMetrics outMetrics = new DisplayMetrics();
          getDisplay(context).getMetrics(outMetrics);      return outMetrics.widthPixels;
      }
2. Resources(推荐)
  • 更便捷的获取

     private static DisplayMetrics getMetrics(Context context) {     return context.getResources().getDisplayMetrics();
     }

DisplayMetrics中的屏幕信息


1. 获取应用屏幕宽度

 /**
  * Get Screen Width
  */
 public static int getScreenWidth(Context context) {     return getDisplayMetrics(context).widthPixels;
 }

2. 获取应用屏幕高度

 /**
  * Get Screen Height
  */
 public static int getScreenHeight(Context context) {     return getDisplayMetrics(context).heightPixels;
 }

3.获取屏幕的Density和Dpi

/**
  * Get Density
  */
 private static float getDensity(Context context) {     return getDisplayMetrics(context).density;
 } /**
  * Get Dpi
  */
 private static int getDpi(Context context) {     return getDisplayMetrics(context).densityDpi;
 }

4.获取屏幕的实际高度(API14)

  /**
     * Get Screen Real Height
     *
     * @param context Context
     * @return Real Height
     */
    public static int getRealHeight(Context context) {
        Display display = getDisplay(context);        int screenHeight = 0;        //版本API 19
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            DisplayMetrics dm = new DisplayMetrics();
            display.getRealMetrics(dm);
            screenHeight = dm.heightPixels;        //版本API 14    
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {            try {
                screenHeight = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
            } catch (Exception e) {
                screenHeight = getScreenHeight(context);
            }
        }        return screenHeight;
    }

5.获取屏幕的实际高度(API19)

 /**
     * Get Screen Real Height
     *
     * @param context Context
     * @return Real Height
     */
    public static int getRealHeight(Context context) {
        Display display = getDisplay(context);        if (display == null) {            return 0;
        }
        DisplayMetrics dm = new DisplayMetrics();
        display.getRealMetrics(dm);        return dm.heightPixels;
    }

6. 获取屏幕的实际宽度(API14)

    /**
     * Get Screen Real Width
     * @param context Context
     * @return Real Width
     */
    public static int getRealWidth(Context context) {
        Display display = getDisplay(context);        int screenWidth = 0;        //版本高于API 19
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            DisplayMetrics dm = new DisplayMetrics();
            display.getRealMetrics(dm);
            screenWidth = dm.widthPixels;            //版本高于API 14 ,小于API 14
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {            try {
                screenWidth = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
            } catch (Exception e) {
                screenWidth = getScreenWidth(context);
            }
        }        return screenWidth;
    }

7. 获取屏幕的实际宽度(API19)

    /**
     * Get Screen Real Width
     *
     * @param context Context
     * @return Real Width
     */
    public static int getRealWidth(Context context) {
        Display display = getDisplay(context);        if (display == null) {            return 0;
        }
        DisplayMetrics dm = new DisplayMetrics();
        display.getRealMetrics(dm);        return dm.widthPixels;
    }



作者:自导自演的机器人
链接:https://www.jianshu.com/p/f8fd3a6e9c3d


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消