• 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遍历获取Office格式(Word,Excel,PPT,PDF)的文件并打开
  3. android画经过多点的曲线
  4. #菜鸟之旅#Android(安卓)Studio开发JNI工程——Native调用Java方
  5. Android3.1比2.2多了一个android…
  6. Android开发实战-项目学习笔记(3)
  7. Android(安卓)实现变色状态栏
  8. Android中Image的简单实例详解
  9. android 自定义AlertDialog 与Activity相互传递数据

随机推荐

  1. 三、安卓UI学习(1)
  2. android实现字体闪烁动画的方法
  3. android用户界面之按钮(Button)教程实例
  4. Android(安卓)SDK开发包国内下载地址
  5. JS与Android WebView的简单交互 + WebVie
  6. 读取android手机流量信息
  7. 《Android和PHP最佳实践》官方站
  8. 2112-7-18 android切屏动画overridePendi
  9. 如何去掉状态栏和内容视图之间的黑色阴影
  10. android、apple PUSH 异同比较