Android开发禁用通知栏下拉
【摘要】
应用禁用通知栏下拉这个需求让我头疼了好几天 statusbar用了后但是效果不是很满意 其他的方法试过但是没有效果,所以就换个思路吧 做法是在通知栏区域弄一个透明的window,这样下拉的时候触摸的区域就...
应用禁用通知栏下拉这个需求让我头疼了好几天
statusbar用了后但是效果不是很满意
其他的方法试过但是没有效果,所以就换个思路吧
做法是在通知栏区域弄一个透明的window,这样下拉的时候触摸的区域就是这个window,系统的就下拉不了了
该做法是需要在应用上方显示一个window 所以需要权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
- 1
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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
文章来源: chengsy.blog.csdn.net,作者:程思扬,版权归原作者所有,如需转载,请联系作者。
原文链接:chengsy.blog.csdn.net/article/details/106222568
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)