Android 屏幕参数获取,转换工具类

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.WindowManager;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 屏幕参数获取,转换工具类
 * 
 * @author lixuan
 */
public class ScreenUtil {

   public static int dip2px(Context context, float dipValue) {
      final float scale = context.getResources().getDisplayMetrics().density;
      return (int) (dipValue * scale + 0.5f * (dipValue >= 0 ? 1 : -1));
   }

   public static int px2dip(Context context, float pxValue) {
      final float scale = context.getResources().getDisplayMetrics().density;
      return (int) (pxValue / scale + 0.5f * (pxValue >= 0 ? 1 : -1));
   }

   public static int sp2px(Context context, float spValue) {
      final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
      return (int) (spValue * fontScale + 0.5f);
   }

   public static int px2sp(Context context, float pxValue) {
      final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
      return (int) (pxValue / fontScale + 0.5f);
   }

   /**
    * 获取状态栏高度
    *
    * @param context 上下文
    * @return int 状态栏高度
    */
   public static int getStatusBarHeight(Context context) {
      try {
         Class<?> c = Class.forName("com.android.internal.R$dimen");
         Object obj = c.newInstance();
         Field field = c.getField("status_bar_height");
         int height = Integer.parseInt(field.get(obj).toString());
         return context.getResources().getDimensionPixelSize(height);
      } catch (Exception e) {
         e.printStackTrace();
      }
      return 75;
   }

   /**
    * 获取屏幕分辨率
    * 
    * @return int[]
    */
   public static int[] getScreenResolution(Activity activity) {
      DisplayMetrics mDisplayMetrics = new DisplayMetrics();
      activity.getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics);
      return new int[]{ mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels };
   }

   /**
    * 获取底部虚拟键盘的高度
    *
    * @return int
    */
   public static int getBottomKeyboardHeight(Activity activity){
      int vh = 0;
      @SuppressLint("WrongConstant") WindowManager windowManager = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
      Display display = windowManager.getDefaultDisplay();
      DisplayMetrics dm = new DisplayMetrics();
      try {
         @SuppressWarnings("rawtypes")
         Class c = Class.forName("android.view.Display");
         @SuppressWarnings("unchecked")
         Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
         method.invoke(display, dm);
         vh = dm.heightPixels - windowManager.getDefaultDisplay().getHeight();
      } catch (Exception e) {
         e.printStackTrace();
      }
      return vh;
   }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值