12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package com.reactnativenavigation.utils;
-
- import android.content.Context;
- import android.content.res.Resources;
- import android.os.Build;
- import android.os.Handler;
- import android.os.Looper;
- import android.support.annotation.NonNull;
- import android.util.DisplayMetrics;
- import android.view.View;
- import android.view.ViewTreeObserver;
- import android.view.WindowManager;
-
- public class UiUtils {
- private static final int STATUS_BAR_HEIGHT_M = 24;
- private static final int STATUS_BAR_HEIGHT_L = 25;
- private static final int DEFAULT_TOOLBAR_HEIGHT = 56;
-
- private static int statusBarHeight = -1;
- private static int toolBarHeight = -1;
-
- public static void runOnPreDrawOnce(final View view, final Runnable task) {
- view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- view.getViewTreeObserver().removeOnPreDrawListener(this);
- task.run();
- return true;
- }
- });
- }
-
- public static void runOnMainThread(Runnable runnable) {
- new Handler(Looper.getMainLooper()).post(runnable);
- }
-
- public static float getWindowHeight(Context context) {
- return getDisplayMetrics(context).heightPixels;
- }
-
- public static float getWindowWidth(Context context) {
- return getDisplayMetrics(context).widthPixels;
- }
-
- @NonNull
- private static DisplayMetrics getDisplayMetrics(Context context) {
- DisplayMetrics metrics = new DisplayMetrics();
- WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
- if (windowManager != null) {
- windowManager.getDefaultDisplay().getMetrics(metrics);
- }
- return metrics;
- }
-
- public static int getStatusBarHeight(Context context) {
- if (statusBarHeight > 0) {
- return statusBarHeight;
- }
- final Resources resources = context.getResources();
- final int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
- statusBarHeight = resourceId > 0 ?
- resources.getDimensionPixelSize(resourceId) :
- (int) dpToPx(context, Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? STATUS_BAR_HEIGHT_M : STATUS_BAR_HEIGHT_L);
- return statusBarHeight;
- }
-
- public static int getToolBarHeight(Context context) {
- if (toolBarHeight > 0) {
- return toolBarHeight;
- }
- final Resources resources = context.getResources();
- final int resourceId = resources.getIdentifier("action_bar_size", "dimen", "android");
- toolBarHeight = resourceId > 0 ?
- resources.getDimensionPixelSize(resourceId) :
- (int) dpToPx(context, DEFAULT_TOOLBAR_HEIGHT);
- return toolBarHeight;
- }
-
- public static float dpToPx(Context context, float dp) {
- float scale = context.getResources().getDisplayMetrics().density;
- return dp * scale + 0.5f;
- }
-
- public static float dpToSp(Context context, float dp) {
- return dpToPx(context, dp) / context.getResources().getDisplayMetrics().density;
- }
- }
|