• DisplayMetircs 的介绍
      • 示例如下

DisplayMetircs 的介绍:

Android可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局变形问题。

手机的分辨率信息是手机的一项重要信息,很好的是,Android 已经提供DisplayMetircs 类可以很方便的获取分辨率。下面简要介绍 DisplayMetics 类:

Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体。

为了获取DisplayMetrics 成员,首先初始化一个对象如下:

DisplayMetrics metrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics;

注:构造函数DisplayMetrics 不需要传递任何参数;调用getWindowManager() 之后,会取得现有Activity的Handle,此时,getDefaultDisplay()方法将取得的宽高维度存放于DisplayMetrics 对象中,而取得的宽高维度是以像素为单位(Pixel),“像素”所指的是“绝对像素”而非“相对像素”。

通过 DisplayMetrics的 toString()方法可以获取到 DisplayMetrics的大部分 fields信息,如下是在分辨率为 480x320情况下的一些输出信息:

这里写图片描述

其中,density为显示的逻辑分辨率(文档中说了很多,看得不是很明白);width及height就为屏幕分辨率(为绝对宽度与高度),与fields中的widthPixels及heightPixels一致;scaleDensity与density一致;xdpi及ydpi为准确物理像素。

示例如下:

import android.app.Activity;  import android.content.Context;  import android.graphics.Bitmap;  import android.graphics.Rect;  import android.util.DisplayMetrics;  import android.view.View;  import android.view.WindowManager;  //获得屏幕相关的辅助类 public class ScreenUtils {      private ScreenUtils()      {          /* cannot be instantiated */          throw new UnsupportedOperationException("cannot be instantiated");      }      /** * 获得屏幕高度 * * @param context * @return */      public static int getScreenWidth(Context context)      {          WindowManager wm = (WindowManager) context                  .getSystemService(Context.WINDOW_SERVICE);          DisplayMetrics outMetrics = new DisplayMetrics();          wm.getDefaultDisplay().getMetrics(outMetrics);          return outMetrics.widthPixels;      }      /** * 获得屏幕宽度 * * @param context * @return */      public static int getScreenHeight(Context context)      {          WindowManager wm = (WindowManager) context                  .getSystemService(Context.WINDOW_SERVICE);          DisplayMetrics outMetrics = new DisplayMetrics();          wm.getDefaultDisplay().getMetrics(outMetrics);          return outMetrics.heightPixels;      }      /** * 获得状态栏的高度 * * @param context * @return */      public static int getStatusHeight(Context context)      {          int statusHeight = -1;          try          {              Class<?> clazz = Class.forName("com.android.internal.R$dimen");              Object object = clazz.newInstance();              int height = Integer.parseInt(clazz.getField("status_bar_height")                      .get(object).toString());              statusHeight = context.getResources().getDimensionPixelSize(height);          } catch (Exception e)          {              e.printStackTrace();          }          return statusHeight;      }      /** * 获取当前屏幕截图,包含状态栏 * * @param activity * @return */      public static Bitmap snapShotWithStatusBar(Activity activity)      {          View view = activity.getWindow().getDecorView();          view.setDrawingCacheEnabled(true);          view.buildDrawingCache();          Bitmap bmp = view.getDrawingCache();          int width = getScreenWidth(activity);          int height = getScreenHeight(activity);          Bitmap bp = null;          bp = Bitmap.createBitmap(bmp, 0, 0, width, height);          view.destroyDrawingCache();          return bp;      }      /** * 获取当前屏幕截图,不包含状态栏 * * @param activity * @return */     public static Bitmap snapShotWithoutStatusBar(Activity activity)      {          View view = activity.getWindow().getDecorView();          view.setDrawingCacheEnabled(true);          view.buildDrawingCache();          Bitmap bmp = view.getDrawingCache();          Rect frame = new Rect();          activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);          int statusBarHeight = frame.top;          int width = getScreenWidth(activity);          int height = getScreenHeight(activity);          Bitmap bp = null;          bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height                  - statusBarHeight);          view.destroyDrawingCache();          return bp;      }  }

更多相关文章

  1. Android实现屏幕旋转方法总结
  2. Android屏幕适配;知识点+攻略+面试要点
  3. android本地后台服务示例
  4. Android 播放视频示例
  5. Android屏幕直播方案
  6. Android屏幕适配总结

随机推荐

  1. android二维码扫描(最近做的项目中用到的
  2. android编译系统makefile
  3. 介绍一种不同流式标签的实现方式
  4. [转]Android中两种设置全屏的方法
  5. Linux环境下Android使用Jenkins自动打包
  6. Activity的onConfigurationChanged事件
  7. android连接真机 调试未测试
  8. Android入门:4种布局
  9. 【转】Android学习笔记-常用的一些源码,防
  10. android properties