美文网首页程诺陪你学Android
Android开发禁用通知栏下拉

Android开发禁用通知栏下拉

作者: 程思扬 | 来源:发表于2020-05-20 22:42 被阅读0次

    应用禁用通知栏下拉这个需求让我头疼了好几天
    statusbar用了后但是效果不是很满意
    其他的方法试过但是没有效果,所以就换个思路吧
    做法是在通知栏区域弄一个透明的window,这样下拉的时候触摸的区域就是这个window,系统的就下拉不了了
    该做法是需要在应用上方显示一个window 所以需要权限

     <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;
        }
      }
    

    相关文章

      网友评论

        本文标题:Android开发禁用通知栏下拉

        本文链接:https://www.haomeiwen.com/subject/vlgoohtx.html