public class ScreenUtil {
/**将px值转换为dip或dp值,保证尺寸大小不变*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
/**将dip或dp值转换为px值,保证尺寸大小不变*/
public static int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
/**将px值转换为sp值,保证文字大小不变*/
public static int px2sp(Context context, float pxValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}
/**将sp值转换为px值,保证文字大小不变*/
public static int sp2px(Context context, float spValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
/**屏幕宽度(像素)*/
public static int getWindowWidth(Activity context) {
DisplayMetrics metric = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(metric);
return metric.widthPixels;
}
/**屏幕高度(像素)*/
public static int getWindowHeight(Activity context) {
DisplayMetrics metric = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(metric);
return metric.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 mContext
* @return 屏幕分辨率信息
*/
public static ScreenInfo getScreenInfo(Context mContext) {
ScreenInfo result = new ScreenInfo();
int widthPixels;
int heightPixels;
WindowManager w = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);
// since SDK_INT = 1;
widthPixels = metrics.widthPixels;
heightPixels = metrics.heightPixels;
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH && Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
try {
widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
} catch (Exception ignored) {
ignored.printStackTrace();
}
}
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
try {
Point realSize = new Point();
Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
widthPixels = realSize.x;
heightPixels = realSize.y;
} catch (Exception ignored) {
ignored.printStackTrace();
}
}
result.widthPixels = widthPixels;
result.heightPixels = heightPixels;
result.screenRealMetrics = widthPixels + "x" + heightPixels;
result.density = metrics.density;
result.density_default = DisplayMetrics.DENSITY_DEFAULT;
result.densityDpi = metrics.densityDpi;
result.densityDpiStr = metrics.densityDpi + " dpi";
result.scaledDensity = metrics.scaledDensity;
result.xdpi = metrics.xdpi;
result.ydpi = metrics.ydpi;
result.size = (Math.sqrt(Math.pow(widthPixels, 2) + Math.pow(heightPixels, 2)) / metrics.densityDpi);
result.sizeStr = String.format("%.2f", result.size);
return result;
}
public static List<String> getGpuFreqVolt() {
List<String> result = new ArrayList<>();
try {
String line;
BufferedReader br = new BufferedReader(new FileReader("/proc/gpufreq/gpufreq_opp_dump"));
while ((line = br.readLine()) != null) {
result.add(line);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* 屏幕信息对象
*/
public static class ScreenInfo {
/**英寸*/
public double size;
public String sizeStr;
/**高*/
public int heightPixels;
/**宽*/
public int widthPixels;
public String screenRealMetrics;
/**显示器的逻辑密度*/
public float density;
/**屏幕密度为点每英寸*/
public int densityDpi;
public String densityDpiStr;
/**显示在显示器的字体的定标因子*/
public float scaledDensity;
/**每在 X 维屏幕英寸的确切物理像素*/
public float xdpi;
/**每在 Y 维屏幕英寸的确切物理像素*/
public float ydpi;
/**在屏幕中显示的参考密度*/
public int density_default;
@Override
public String toString() {
return "ScreenInfo{" +
"size=" + size +
", sizeStr='" + sizeStr + '\'' +
", heightPixels=" + heightPixels +
", screenRealMetrics='" + screenRealMetrics + '\'' +
", widthPixels=" + widthPixels +
", density=" + density +
", densityDpi=" + densityDpi +
", densityDpiStr='" + densityDpiStr + '\'' +
", scaledDensity=" + scaledDensity +
", xdpi=" + xdpi +
", ydpi=" + ydpi +
", density_default=" + density_default +
'}';
}
}
}