package support.ui.utilities;
import android.app.Activity;
import android.content.Context;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.view.Display;
import java.lang.reflect.Method;
import support.ui.app.SupportApp;
/**
* Created by YuGang Yang on 04 13, 2016.
* Copyright 2015-2016 qiji.tech. All rights reserved.
*/
public final class ScreenUtils {
private static DisplayMetrics metrics;
public static DisplayMetrics getDisplayMetrics() {
if( metrics == null ) {
metrics = SupportApp.appResources().getDisplayMetrics();
}
return metrics;
}
public static float getDensity() {
if( metrics == null ) {
getDisplayMetrics();
}
return metrics.density;
}
public static float getScaledDensity() {
if( metrics == null ) {
getDisplayMetrics();
}
return metrics.scaledDensity;
}
public static int getScreenWidth() {
if( metrics == null ) {
getDisplayMetrics();
}
return metrics.widthPixels;
}
public static int getScreenHeight() {
if( metrics == null ) {
getDisplayMetrics();
}
return metrics.heightPixels;
}
public static int px2dp(float pxValue) {
if( metrics == null ) {
getDisplayMetrics();
}
return (int) (pxValue / metrics.density + 0.5f);
}
public static int dp2px(float dipValue) {
if( metrics == null ) {
getDisplayMetrics();
}
return (int) (dipValue * metrics.density + 0.5f);
}
public static int dp2px(float dpValue, Context context) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
public static int px2sp(float pxValue) {
if( metrics == null ) {
getDisplayMetrics();
}
return (int) (pxValue / metrics.scaledDensity + 0.5f);
}
public static int sp2px(float spValue) {
if( metrics == null ) {
getDisplayMetrics();
}
return (int) (spValue * metrics.scaledDensity + 0.5f);
}
public static float getTextLength(float textSize, String text) {
Paint paint = new Paint();
paint.setTextSize(textSize);
return paint.measureText(text);
}
/**
* 获取实际屏幕高度
* 如 1920 * 1080
* @param activity Activity
* @return int[]
*/
public static int[] getRealMetrics(Activity activity) {
int[] dpi = new int[2];
Display display = activity.getWindowManager().getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
@SuppressWarnings("rawtypes") Class c;
try {
c = Class.forName("android.view.Display");
@SuppressWarnings("unchecked") Method method =
c.getMethod("getRealMetrics", DisplayMetrics.class);
method.invoke(display, dm);
dpi[0] = dm.widthPixels;
dpi[1] = dm.heightPixels;
} catch (Exception e) {
e.printStackTrace();
}
return dpi;
}
/**
*
* @param activity Activity
* @return int
*/
public static int getStatusHeight(Activity activity) {
Rect rect = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
return rect.top;
}
}