电子屏项目
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

128 líneas
3.8 KiB

  1. package com.yzx.webebook.utils;
  2. import android.content.res.Resources;
  3. import android.util.DisplayMetrics;
  4. import android.util.TypedValue;
  5. import android.view.View;
  6. import androidx.appcompat.app.AppCompatActivity;
  7. import com.yzx.webebook.App;
  8. import java.lang.reflect.Method;
  9. /**
  10. * Created by newbiechen on 17-5-1.
  11. */
  12. public class ScreenUtils {
  13. public static int dpToPx(int dp) {
  14. DisplayMetrics metrics = getDisplayMetrics();
  15. return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
  16. }
  17. public static int pxToDp(int px) {
  18. DisplayMetrics metrics = getDisplayMetrics();
  19. return (int) (px / metrics.density);
  20. }
  21. public static int spToPx(int sp) {
  22. DisplayMetrics metrics = getDisplayMetrics();
  23. return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, metrics);
  24. }
  25. public static int pxToSp(int px) {
  26. DisplayMetrics metrics = getDisplayMetrics();
  27. return (int) (px / metrics.scaledDensity);
  28. }
  29. /**
  30. * 获取手机显示App区域的大小(头部导航栏+ActionBar+根布局),不包括虚拟按钮
  31. *
  32. * @return
  33. */
  34. public static int[] getAppSize() {
  35. int[] size = new int[2];
  36. DisplayMetrics metrics = getDisplayMetrics();
  37. size[0] = metrics.widthPixels;
  38. size[1] = metrics.heightPixels;
  39. return size;
  40. }
  41. /**
  42. * 获取整个手机屏幕的大小(包括虚拟按钮)
  43. * 必须在onWindowFocus方法之后使用
  44. *
  45. * @param activity
  46. * @return
  47. */
  48. public static int[] getScreenSize(AppCompatActivity activity) {
  49. int[] size = new int[2];
  50. View decorView = activity.getWindow().getDecorView();
  51. size[0] = decorView.getWidth();
  52. size[1] = decorView.getHeight();
  53. return size;
  54. }
  55. /**
  56. * 获取导航栏的高度
  57. *
  58. * @return
  59. */
  60. public static int getStatusBarHeight() {
  61. Resources resources = App.Companion.getContext().getResources();
  62. int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
  63. return resources.getDimensionPixelSize(resourceId);
  64. }
  65. /**
  66. * 获取虚拟按键的高度
  67. *
  68. * @return
  69. */
  70. public static int getNavigationBarHeight() {
  71. int navigationBarHeight = 0;
  72. Resources rs = App.Companion.getContext().getResources();
  73. int id = rs.getIdentifier("navigation_bar_height", "dimen", "android");
  74. if (id > 0 && hasNavigationBar()) {
  75. navigationBarHeight = rs.getDimensionPixelSize(id);
  76. }
  77. return navigationBarHeight;
  78. }
  79. /**
  80. * 是否存在虚拟按键
  81. *
  82. * @return
  83. */
  84. private static boolean hasNavigationBar() {
  85. boolean hasNavigationBar = false;
  86. Resources rs = App.Companion.getContext().getResources();
  87. int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");
  88. if (id > 0) {
  89. hasNavigationBar = rs.getBoolean(id);
  90. }
  91. try {
  92. Class systemPropertiesClass = Class.forName("android.os.SystemProperties");
  93. Method m = systemPropertiesClass.getMethod("get", String.class);
  94. String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");
  95. if ("1".equals(navBarOverride)) {
  96. hasNavigationBar = false;
  97. } else if ("0".equals(navBarOverride)) {
  98. hasNavigationBar = true;
  99. }
  100. } catch (Exception e) {
  101. }
  102. return hasNavigationBar;
  103. }
  104. public static DisplayMetrics getDisplayMetrics() {
  105. DisplayMetrics metrics = App.Companion
  106. .getContext()
  107. .getResources()
  108. .getDisplayMetrics();
  109. return metrics;
  110. }
  111. }