react-native-navigation的迁移库

UiUtils.java 3.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package com.reactnativenavigation.utils;
  2. import android.content.Context;
  3. import android.content.res.Resources;
  4. import android.os.Build;
  5. import android.os.Handler;
  6. import android.os.Looper;
  7. import android.support.annotation.NonNull;
  8. import android.util.DisplayMetrics;
  9. import android.view.View;
  10. import android.view.ViewTreeObserver;
  11. import android.view.WindowManager;
  12. public class UiUtils {
  13. private static final int STATUS_BAR_HEIGHT_M = 24;
  14. private static final int STATUS_BAR_HEIGHT_L = 25;
  15. private static final int DEFAULT_TOOLBAR_HEIGHT = 56;
  16. private static int statusBarHeight = -1;
  17. private static int toolBarHeight = -1;
  18. public static void runOnPreDrawOnce(final View view, final Runnable task) {
  19. view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
  20. @Override
  21. public boolean onPreDraw() {
  22. view.getViewTreeObserver().removeOnPreDrawListener(this);
  23. task.run();
  24. return true;
  25. }
  26. });
  27. }
  28. public static void runOnMainThread(Runnable runnable) {
  29. new Handler(Looper.getMainLooper()).post(runnable);
  30. }
  31. public static float getWindowHeight(Context context) {
  32. return getDisplayMetrics(context).heightPixels;
  33. }
  34. public static float getWindowWidth(Context context) {
  35. return getDisplayMetrics(context).widthPixels;
  36. }
  37. @NonNull
  38. private static DisplayMetrics getDisplayMetrics(Context context) {
  39. DisplayMetrics metrics = new DisplayMetrics();
  40. WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
  41. if (windowManager != null) {
  42. windowManager.getDefaultDisplay().getMetrics(metrics);
  43. }
  44. return metrics;
  45. }
  46. public static int getStatusBarHeight(Context context) {
  47. if (statusBarHeight > 0) {
  48. return statusBarHeight;
  49. }
  50. final Resources resources = context.getResources();
  51. final int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
  52. statusBarHeight = resourceId > 0 ?
  53. resources.getDimensionPixelSize(resourceId) :
  54. (int) dpToPx(context, Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? STATUS_BAR_HEIGHT_M : STATUS_BAR_HEIGHT_L);
  55. return statusBarHeight;
  56. }
  57. public static int getToolBarHeight(Context context) {
  58. if (toolBarHeight > 0) {
  59. return toolBarHeight;
  60. }
  61. final Resources resources = context.getResources();
  62. final int resourceId = resources.getIdentifier("action_bar_size", "dimen", "android");
  63. toolBarHeight = resourceId > 0 ?
  64. resources.getDimensionPixelSize(resourceId) :
  65. (int) dpToPx(context, DEFAULT_TOOLBAR_HEIGHT);
  66. return toolBarHeight;
  67. }
  68. public static float dpToPx(Context context, float dp) {
  69. float scale = context.getResources().getDisplayMetrics().density;
  70. return dp * scale + 0.5f;
  71. }
  72. public static float dpToSp(Context context, float dp) {
  73. return dpToPx(context, dp) / context.getResources().getDisplayMetrics().density;
  74. }
  75. }