cbf1d54b6568631951bcc466153af1cdc3049ae9.svn-base 6.2 KB

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