|
- package com.yzx.webebook.utils;
-
- import android.content.res.Resources;
- import android.util.DisplayMetrics;
- import android.util.TypedValue;
- import android.view.View;
-
- import androidx.appcompat.app.AppCompatActivity;
-
- import com.yzx.webebook.App;
-
- import java.lang.reflect.Method;
-
- /**
- * Created by newbiechen on 17-5-1.
- */
-
- public class ScreenUtils {
-
- public static int dpToPx(int dp) {
- DisplayMetrics metrics = getDisplayMetrics();
- return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
- }
-
- public static int pxToDp(int px) {
- DisplayMetrics metrics = getDisplayMetrics();
- return (int) (px / metrics.density);
- }
-
- public static int spToPx(int sp) {
- DisplayMetrics metrics = getDisplayMetrics();
- return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, metrics);
- }
-
- public static int pxToSp(int px) {
- DisplayMetrics metrics = getDisplayMetrics();
- return (int) (px / metrics.scaledDensity);
- }
-
- /**
- * 获取手机显示App区域的大小(头部导航栏+ActionBar+根布局),不包括虚拟按钮
- *
- * @return
- */
- public static int[] getAppSize() {
- int[] size = new int[2];
- DisplayMetrics metrics = getDisplayMetrics();
- size[0] = metrics.widthPixels;
- size[1] = metrics.heightPixels;
- return size;
- }
-
- /**
- * 获取整个手机屏幕的大小(包括虚拟按钮)
- * 必须在onWindowFocus方法之后使用
- *
- * @param activity
- * @return
- */
- public static int[] getScreenSize(AppCompatActivity activity) {
- int[] size = new int[2];
- View decorView = activity.getWindow().getDecorView();
- size[0] = decorView.getWidth();
- size[1] = decorView.getHeight();
- return size;
- }
-
- /**
- * 获取导航栏的高度
- *
- * @return
- */
- public static int getStatusBarHeight() {
- Resources resources = App.Companion.getContext().getResources();
- int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
- return resources.getDimensionPixelSize(resourceId);
- }
-
- /**
- * 获取虚拟按键的高度
- *
- * @return
- */
- public static int getNavigationBarHeight() {
- int navigationBarHeight = 0;
- Resources rs = App.Companion.getContext().getResources();
- int id = rs.getIdentifier("navigation_bar_height", "dimen", "android");
- if (id > 0 && hasNavigationBar()) {
- navigationBarHeight = rs.getDimensionPixelSize(id);
- }
- return navigationBarHeight;
- }
-
- /**
- * 是否存在虚拟按键
- *
- * @return
- */
- private static boolean hasNavigationBar() {
- boolean hasNavigationBar = false;
- Resources rs = App.Companion.getContext().getResources();
- int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");
- if (id > 0) {
- hasNavigationBar = rs.getBoolean(id);
- }
- try {
- Class systemPropertiesClass = Class.forName("android.os.SystemProperties");
- Method m = systemPropertiesClass.getMethod("get", String.class);
- String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");
- if ("1".equals(navBarOverride)) {
- hasNavigationBar = false;
- } else if ("0".equals(navBarOverride)) {
- hasNavigationBar = true;
- }
- } catch (Exception e) {
- }
- return hasNavigationBar;
- }
-
- public static DisplayMetrics getDisplayMetrics() {
- DisplayMetrics metrics = App.Companion
- .getContext()
- .getResources()
- .getDisplayMetrics();
- return metrics;
- }
- }
|