应用禁用通知栏下拉这个需求让我头疼了好几天
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; } }