ScreenUtil.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package com.zy.bvvm.helper;
  2. import android.app.Activity;
  3. import android.app.ActivityGroup;
  4. import android.content.Context;
  5. import android.graphics.Bitmap;
  6. import android.graphics.Rect;
  7. import android.os.Build;
  8. import android.util.Log;
  9. import android.util.TypedValue;
  10. import android.view.Display;
  11. import android.view.View;
  12. import android.view.ViewGroup;
  13. import android.view.WindowManager;
  14. import androidx.appcompat.app.AppCompatActivity;
  15. import com.zy.bvvm.R;
  16. /**
  17. * Created by Android Studio.
  18. * User: zbb
  19. * Date: 2019/7/2
  20. * Describe: ScreenUtil
  21. */
  22. public class ScreenUtil {
  23. private ScreenUtil() {
  24. /* cannot be instantiated */
  25. throw new UnsupportedOperationException("cannot be instantiated");
  26. }
  27. private static int mStatusHeight = -1;
  28. public static int dp2px(Context ctx, float dpValue) {
  29. final float density = ctx.getResources().getDisplayMetrics().density;
  30. return (int) (dpValue * density + 0.5f);
  31. }
  32. public static int sp2px(Context ctx, float spValue) {
  33. final float scaledDensity = ctx.getResources().getDisplayMetrics().scaledDensity;
  34. return (int) (spValue * scaledDensity + 0.5f);
  35. }
  36. /**
  37. * 获取屏幕的宽度
  38. * @param context
  39. * @return
  40. */
  41. public static int getScreenWidth(Context context) {
  42. WindowManager manager = (WindowManager) context
  43. .getSystemService(Context.WINDOW_SERVICE);
  44. Display display = manager.getDefaultDisplay();
  45. return display.getWidth();
  46. }
  47. /**
  48. * 获取屏幕的高度
  49. * @param context
  50. * @return
  51. */
  52. public static int getScreenHeight(Context context) {
  53. WindowManager manager = (WindowManager) context
  54. .getSystemService(Context.WINDOW_SERVICE);
  55. Display display = manager.getDefaultDisplay();
  56. return display.getHeight();
  57. }
  58. /**
  59. * 获得状态栏的高度
  60. * @param context
  61. * @return mStatusHeight
  62. */
  63. public static int getStatusHeight(Context context) {
  64. if (mStatusHeight != -1) {
  65. return mStatusHeight;
  66. }
  67. try {
  68. int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
  69. if (resourceId > 0) {
  70. mStatusHeight = context.getResources().getDimensionPixelSize(resourceId);
  71. }
  72. } catch (Exception e) {
  73. e.printStackTrace();
  74. }
  75. return mStatusHeight;
  76. }
  77. /**
  78. * 获取当前屏幕截图,不包含状态栏
  79. * @param activity
  80. * @return bp
  81. */
  82. public static Bitmap snapShotWithoutStatusBar(Activity activity) {
  83. View view = activity.getWindow().getDecorView();
  84. view.setDrawingCacheEnabled(true);
  85. view.buildDrawingCache();
  86. Bitmap bmp = view.getDrawingCache();
  87. if (bmp == null) {
  88. return null;
  89. }
  90. Rect frame = new Rect();
  91. activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
  92. int statusBarHeight = frame.top;
  93. Bitmap bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, bmp.getWidth(), bmp.getHeight() - statusBarHeight);
  94. view.destroyDrawingCache();
  95. view.setDrawingCacheEnabled(false);
  96. return bp;
  97. }
  98. /**
  99. * 获取actionbar的像素高度,默认使用android官方兼容包做actionbar兼容
  100. *
  101. * @return
  102. */
  103. public static int getActionBarHeight(Context context) {
  104. int actionBarHeight=0;
  105. if(context instanceof AppCompatActivity &&((AppCompatActivity) context).getSupportActionBar()!=null) {
  106. Log.d("isAppCompatActivity", "==AppCompatActivity");
  107. actionBarHeight = ((AppCompatActivity) context).getSupportActionBar().getHeight();
  108. }else if(context instanceof Activity && ((Activity) context).getActionBar()!=null) {
  109. Log.d("isActivity","==Activity");
  110. actionBarHeight = ((Activity) context).getActionBar().getHeight();
  111. }else if(context instanceof ActivityGroup){
  112. Log.d("ActivityGroup","==ActivityGroup");
  113. if (((ActivityGroup) context).getCurrentActivity() instanceof AppCompatActivity && ((AppCompatActivity) ((ActivityGroup) context).getCurrentActivity()).getSupportActionBar()!=null){
  114. actionBarHeight = ((AppCompatActivity) ((ActivityGroup) context).getCurrentActivity()).getSupportActionBar().getHeight();
  115. }else if (((ActivityGroup) context).getCurrentActivity() instanceof Activity && ((Activity) ((ActivityGroup) context).getCurrentActivity()).getActionBar()!=null){
  116. actionBarHeight = ((Activity) ((ActivityGroup) context).getCurrentActivity()).getActionBar().getHeight();
  117. }
  118. }
  119. if (actionBarHeight != 0)
  120. return actionBarHeight;
  121. final TypedValue tv = new TypedValue();
  122. if(context.getTheme().resolveAttribute( R.attr.actionBarSize, tv, true)){
  123. if (context.getTheme().resolveAttribute(R.attr.actionBarSize, tv, true))
  124. actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics());
  125. } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
  126. if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
  127. actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics());
  128. }else {
  129. if (context.getTheme().resolveAttribute(R.attr.actionBarSize, tv, true))
  130. actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics());
  131. }
  132. Log.d("actionBarHeight","===="+actionBarHeight);
  133. return actionBarHeight;
  134. }
  135. /**
  136. * 设置view margin
  137. * @param v
  138. * @param l
  139. * @param t
  140. * @param r
  141. * @param b
  142. */
  143. public static void setMargins (View v, int l, int t, int r, int b) {
  144. if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
  145. ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
  146. p.setMargins(l, t, r, b);
  147. v.requestLayout();
  148. }
  149. }
  150. }