如何禁用Android状态栏相互作用



是否有一种方法可以在Android上保持状态栏,同时禁用所有可以使用的交互,例如将其拉下来?

我想保留该酒吧提供的信息,但我不希望用户与之互动。

这是我喜欢使用的方法。您可以将其从方法中解开,然后将其放置在基本活动中。IIRC,我也从Stackoverflow那里得到了这个,但是我没有记下它,所以我不确定原始帖子在哪里。

基本上要做的是将透明的覆盖层放在截获所有触摸事件的顶部栏上。到目前为止,它对我来说很好,看看它如何为您工作。

您可能需要将此线放在AndroidManifest中:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

我在项目中有它,但是我不记得是因为这个还是其他。如果您有许可错误,请添加。

WindowManager manager;
CustomViewGroup lockView;
public void lock(Activity activity) {
    //lock top notification bar
    manager = ((WindowManager) activity.getApplicationContext()
            .getSystemService(Context.WINDOW_SERVICE));
    WindowManager.LayoutParams topBlockParams = new WindowManager.LayoutParams();
    topBlockParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
    topBlockParams.gravity = Gravity.TOP;
    topBlockParams.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;
    topBlockParams.width = WindowManager.LayoutParams.MATCH_PARENT;
    topBlockParams.height = (int) (50 * activity.getResources()
            .getDisplayMetrics().scaledDensity);
    topBlockParams.format = PixelFormat.TRANSPARENT;
    lockView = new CustomViewGroup(activity);
    manager.addView(lockView, topBlockParams);
}

和CustomViewGroup是

private class CustomViewGroup extends ViewGroup {
    Context context;
    public CustomViewGroup(Context context) {
        super(context);
        this.context = context;
    }
    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        Log.i("StatusBarBlocker", "intercepted by "+ this.toString());
        return true;
    }
}

也!您还必须在活动结束时删除此视图,因为我认为即使杀死应用程序,它也会继续阻止屏幕。总是,始终始终称此为Onpause和Ondestroy。

    if (lockView!=null) {
        if (lockView.isShown()) {
            //unlock top
            manager.removeView(lockView);
        }
    }

最新更新