Как сохранить нижнюю панель управления скрытой всегда, даже после того, как диалог появляется и закрывается? - PullRequest
0 голосов
/ 25 июня 2019

То, что я реализовал, выглядит следующим образом.

Я установил это в упражнении.

window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)

Строка состояния должна быть не спрятана, а просто панель управления.

И затем, когда я открываю диалог и закрываю его, я вызываю этот метод ниже:

    private fun setDefaultUi(dialog: Dialog?) {
        var decorView: View? = null
        if (dialog == null) {
            decorView = this.window.decorView
        } else {
            decorView = dialog!!.window.decorView
        }
        decorView.systemUiVisibility = (
                View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
                        or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
                        or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY // hide status bar and nav bar after a short delay, or if the user interacts with the middle of the screen
                )
    }

что-то вроде этого:

    private fun showMyDialog() {
        noticeUrlDialog = Dialog(this)
        noticeUrlDialog!!.setContentView(R.layout.dialog_my)

        val btnClose = myDialog!!.btn_close

        btnX.setOnClickListener {
            myDialog!!.dismiss()
            setDefaultUi(null)
        }
        myDialog!!.show()
        setDefaultUi(myDialog)
    }

Таким образом, я могу скрыть нижнюю панель управления, котораяпоявляется после того, как всплывает и закрывается диалоговое окно.

Но я не думаю, что это правильный путь.Мне нужно многократно вызывать метод. Кроме того, панель управления отображается за секунду до setDefaultUi().Итак, я хотел бы знать, есть ли лучший способ?

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Мне удалось добиться этого только на всех API и устройствах, использующих SystemUiVisibilityChangeListener при прослушивании изменений пользовательского интерфейса и повторном применении флагов.Вот пример кода на Kotlin:

fun hideStatusBar() {
        DisplayUtil.hideStatusBar(activity)
        activity?.window?.decorView?.setOnSystemUiVisibilityChangeListener { visibility ->
            if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
                DisplayUtil.hideStatusBar(activity)
            }
        }
    }

и DisplayUtil.hideStatusBar(activity):

object DisplayUtil {
 fun hideStatusBar(activity: Activity?) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                activity?.window?.decorView?.systemUiVisibility = (
                        View.SYSTEM_UI_FLAG_IMMERSIVE
                                or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                                or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                                or View.SYSTEM_UI_FLAG_FULLSCREEN)
            } else {
                activity?.window?.decorView?.systemUiVisibility = (
                        View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                or View.SYSTEM_UI_FLAG_FULLSCREEN)
            }
        }
}

Также не забудьте удалить прослушиватель, когда он не нужен.

0 голосов
/ 25 июня 2019

Чтобы поддерживать режим погружения, вам нужно установить FLAG_NOT_FOCUSABLE для параметров макета диалогового окна, прежде чем его показывать. Однако это также не позволит пользователю взаимодействовать с диалоговым окном, поэтому вам необходимо сбросить этот флаг после вызова show().

private fun showMyDialog() {
        noticeUrlDialog = Dialog(this)
        noticeUrlDialog!!.setContentView(R.layout.dialog_my)

        val btnClose = myDialog!!.btn_close

        btnX.setOnClickListener {
            myDialog!!.dismiss()
            setDefaultUi(null)
        }

        myDialog.window?.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
        myDialog!!.show()
        myDialog!!.window?.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)

        setDefaultUi(myDialog)
    }
...