前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android开发禁用通知栏下拉

Android开发禁用通知栏下拉

作者头像
程思扬
发布2022-01-11 15:10:38
1.2K0
发布2022-01-11 15:10:38
举报
文章被收录于专栏:程思阳的专栏程思阳的专栏

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

代码语言:javascript
复制
 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
代码语言:javascript
复制
 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;
    }
  }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档