在沉浸式粘滞模式下onBackPressed函数不起作用 [英] onBackPressed function not working under IMMERSIVE STICKY mode

查看:126
本文介绍了在沉浸式粘滞模式下onBackPressed函数不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用沉浸式模式进行内部带有videoView的活动。

I'm using Immersive Mode for an activity with videoView inside.

我的目标是在触摸屏幕,媒体控制器和系统控制栏显示或消失时一起。现在一切正常。

My goal is when touch on screen, the media controller and the system control bar show or disappear together. Everything works fine now.

问题是我无法正确离开活动。当我按下后退按钮一次时,系统栏再次隐藏,什么也没有发生。我必须按两次退出活动。我不知道为什么

The problem is I can't leave activity properly. When I press the back button once, the system bar just hide again and nothing happens. I have to press twice to exit the activity. I don't know why.

这是我的代码。

我使用FullScreenActivity()活动定义沉浸模式:

I use an FullScreenActivity() activity to define IMMERSIVE MODE:

@TargetApi(Build.VERSION_CODES.KITKAT)
private void FullScreenActivity() {
        getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav                                                               // bar
                        | View.SYSTEM_UI_FLAG_FULLSCREEN// hide status bar;
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
        }
}

在OnCreate()中:

in OnCreate():

@Override
protected void onCreate(Bundle savedInstanceState) {

    //getActionBar().setDisplayShowTitleEnabled(false);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

    FullScreenActivity();

然后在媒体控制器中,我再次定义了IMMERSIVE MODE,因为如果我不控制器显示,操作栏和系统栏将再次返回。

And in the media controller, I define the IMMERSIVE MODE again, because if I don't after the controller shows, the actionbar and system bar will be back again.

private class MyController extends MediaController {

    public MyController(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public boolean onTouchEvent(MotionEvent event) {
        //........
    }

    @Override
    public void show() {
        super.show();
        FullScreenActivity();
    }

    @Override
    public void hide() {
        super.hide();
        FullScreenActivity();
    }

}

最后,在onBackPressed中(),我实现了我的功能:

and at last, in the onBackPressed(), I implemented my function:

@Override
public void onBackPressed() {
    Toast.makeText(getApplicationContext(), "onbackpressed", Toast.LENGTH_SHORT).show();
    super.onBackPressed();

    if (tgtIDArr != null && tgtIDArr.size() > 0) {
        new AlertDialog.Builder(this)
                .setIcon(android.R.drawable.ic_dialog_alert)
                .setTitle("Exit Player!")
                .setMessage("Are you sure you want to leave Player?")
                .setPositiveButton("Yes",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                .......
                                finish();
                            }
                        }).setNegativeButton("No", null).show();
    }else{
        ........            
        finish();
    }
}  

我不知道为什么,但只有当我按下两次返回按钮将触发此onBackPressed()函数。

I don't know why, but only when I press back button twice would trigger this onBackPressed() function.

有人知道为什么吗?谢谢!!

Anyone knows why? thanks!!

推荐答案

如果要在按下后退按钮且媒体控制器可见时退出活动,则可以拦截后退按钮,并带有以下代码段。

If you want to exit the activity when the back button is pressed and the media controller is visible then you can intercept the back button with the following code snippet.

   @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        int keyCode = event.getKeyCode();
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            finish();
            return true;
        }
        return super.dispatchKeyEvent(event);
    }

这里是解决类似问题的相同方法后退按钮在Media Player中不起作用

Which is the same solution to a similar problem here Back button not working in Media player

这篇关于在沉浸式粘滞模式下onBackPressed函数不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆