网上查了几篇禁止的方法
第一种:类似于这样
//StatusBarManager.DISABLE_EXPAND StatusBarManager statusBarManager = (StatusBarManager) this.getSystemService(Context.STATUS_BAR_SERVICE); int state = StatusBarManager.DISABLE_EXPAND; statusBarManager.disable(state);
但是我获取不到StatusBarManager,只能放弃,可以获取到的可以试试
第二种:
@Override public void onWindowFocusChanged(boolean hasFocus) { // TODO Auto-generated method stub super.onWindowFocusChanged(hasFocus); try { Object service = getSystemService("statusbar"); Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); Method test = statusbarManager.getMethod("collapse"); test.invoke(service); } catch (Exception ex) { ex.printStackTrace(); } }
还要在清单文件中添加上权限
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/> <uses-permission android:name="android.permission.STATUS_BAR"/>
还有第三种,我没有详情去看我就放个链接,有空的大家可以去看看
https://blog.csdn.net/u011913612/article/details/72478517
然后说一下我自己的想法把,可以完成这个功能,请大家指教一下
思路:在状态栏上覆盖一层透明view,点击时,直接消费掉,禁止继续往下传递,接触不到状态栏,就拉不出来,比较笨的一个办法,但是也挺有效
废话说的不少了,上代码把:
//禁止下拉 private void UnDropDown() { manager = ((WindowManager) 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 | // this is to enable the notification to recieve touch events WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | // Draws over status bar WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; localLayoutParams.height = (int) (50 * getResources() .getDisplayMetrics().scaledDensity); //50高度这边我是固定死了,也可以动态获取状态栏高度,然后赋值 localLayoutParams.format = PixelFormat.TRANSPARENT; view = new CustomViewGroup(this); manager.addView(view, localLayoutParams); }
CustomViewGroup 代码:
import android.content.Context; import android.util.Log; import android.view.MotionEvent; import android.view.ViewGroup; public 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) { //直接消费,不向下传递 return true; } }
不要忘记销毁
@Override protected void onDestroy() { super.onDestroy(); if (view != null) { WindowManager manager = ((WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE)); manager.removeView(view); } }
如果你想要恢复正常:
/** * 允许下拉 * @param context */ private void allowDropDown(Context context) { CustomViewGroup view = new CustomViewGroup(context); WindowManager manager = ((WindowManager) context.getApplicationContext() .getSystemService(Context.WINDOW_SERVICE)); manager.removeView(view); }
还有一步清单文件加上一个权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
如果是6.0以后,记得要加动态权限,防止崩溃哦