package com.sxjs.common.util;
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.Window;
import java.lang.reflect.Field;
/*
* 与屏幕信息相关的工具类,如宽高,密度,转换等
*/
public class ScreenUtil {
private static DisplayMetrics initScreen(Context context) {
return context.getResources().getDisplayMetrics();
}
public static int getWidth(Context activity) {
return initScreen(activity).widthPixels;
}
public static int getHeight(Context context) {
return initScreen(context).heightPixels;
}
public static int px2dip(Context context, float pxValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(pxValue/scale +0.5f);
}
public static int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
/*
* 获取状态栏高度
*/
public static int getStatusBarHeight(Activity activity) {
Rect frame = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
// int statusBarHeight =
return frame.top;
}
/*
* 反射方式获取状态栏高度
*/
public static int getStatusBarHeightByReflact(Activity activity) {
try {
Class<?> c = Class.forName("com.android.internal.R$dimen");
Object obj = c.newInstance();
Field field = c.getField("status_bar_height");
int x = Integer.parseInt(field.get(obj).toString());
int sbar = activity.getResources().getDimensionPixelSize(x);
return sbar;
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
/*
* 获取标题栏高度
*/
public static int gettitleBarHeight(Activity activity, int statusBarHeight) {
int contentTop = activity.getWindow()
.findViewById(Window.ID_ANDROID_CONTENT).getTop();
if (statusBarHeight <= 0)
statusBarHeight = getStatusBarHeight(activity);
// statusBarHeight是上面所求的状态栏的高度
int titleBarHeight = contentTop - statusBarHeight;
return titleBarHeight;
}
/*
* 得到view 的宽高
*/
public static int[] getViewWH(Activity activity, View view) {
int width = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
int height = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
view.measure(width, height);
int w = view.getMeasuredWidth();
int h = view.getMeasuredHeight();
return new int[] { w, h };
}
/**
* 获得屏幕宽度,单位px
*
* @param context 上下文
* @return 屏幕宽度
*/
public static int getScreenWidth(Context context) {
if(context==null)return 0;
DisplayMetrics dm = context.getResources().getDisplayMetrics();
return dm.widthPixels;
}
/**
* 获得屏幕高度
*
* @param context 上下文
* @return 屏幕除去通知栏的高度
*/
public static int getScreenHeight(Context context) {
if(context==null)return 0;
DisplayMetrics dm = context.getResources().getDisplayMetrics();
return dm.heightPixels-getStatusBarHeight(context);
}
/**
* 获取通知栏高度
*
* @param context 上下文
* @return 通知栏高度
*/
public static int getStatusBarHeight(Context context) {
int statusBarHeight = 0;
try {
Class<?> clazz = Class.forName("com.android.internal.R$dimen");
Object obj = clazz.newInstance();
Field field = clazz.getField("status_bar_height");
int temp = Integer.parseInt(field.get(obj).toString());
statusBarHeight = context.getResources().getDimensionPixelSize(temp);
} catch (Exception e) {
e.printStackTrace();
}
return statusBarHeight;
}
}