Android development disable notification bar drop-down

I've had a headache for several days with the requirement of applying the disable notification bar to pull down
statusbar is used, but the effect is not very satisfactory
Other methods have been tried but have no effect, so let's change our thinking
The way to do this is to make a transparent window in the notice bar area, so that when you pull down, the area you touch is the window, and the system cannot pull down
The change is to display a window above the application, so you need permission



 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
 public static final String STATUS_BAR_HEIGHT = "status_bar_height";
  public static final String DIMEN = "dimen";
  public static final String DEF_PACKAGE = "android";
   public static void preventStatusBarExpansion(Context context) {
    WindowManager manager = ((WindowManager) context.getApplicationContext()
                                                    .getSystemService(Context.WINDOW_SERVICE));

    WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams();
    localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
    localLayoutParams.gravity = Gravity.TOP;
    localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
        | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;

    localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;

    int resId = context.getResources()
                       .getIdentifier(STATUS_BAR_HEIGHT, DIMEN, DEF_PACKAGE);
    int result;
    if (resId > 0) {
      result = context.getResources()
                      .getDimensionPixelSize(resId);
    } else {
      // Use Fallback size:
      result = 60; // 60px Fallback
    }

    localLayoutParams.height = result;
    localLayoutParams.format = PixelFormat.TRANSPARENT;

    if (view == null) {
      view = new CustomViewGroup(context);
    }

    try {
      if (manager != null) {
        manager.addView(view, localLayoutParams);
      }
    } catch (Exception ignored) {
    }
  }

  public static void allowStatusBarExpansion(Context context) {
    WindowManager manager = ((WindowManager) context.getApplicationContext()
                                                    .getSystemService(Context.WINDOW_SERVICE));
    try {
      if (manager != null) {
        manager.removeViewImmediate(view);
      }
    } catch (Exception ignored) {
    }
  }

  public static class CustomViewGroup extends ViewGroup {
    public CustomViewGroup(Context context) {
      super(context);
    }

    @Override
    protected void onLayout(boolean changed,
                            int l,
                            int t,
                            int r,
                            int b) {
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
      // Intercepted touch!
      return true;
    }
  }

Keywords: Android

Added by colombian on Wed, 20 May 2020 19:09:09 +0300