【问题标题】:How to hide bottom navigation bar in fragment when dialog is displayed in Kotlin?在 Kotlin 中显示对话框时如何隐藏片段中的底部导航栏?
【发布时间】:2021-04-15 16:38:10
【问题描述】:

显示对话框时,我很难隐藏底部导航栏。我不希望它出现,因为应用程序以全屏模式显示。

这是构建对话框的类:

class CreateNewFolderDialogFragment : DialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

        return activity?.let {
            // Use the Builder class for convenient dialog construction
            //val builder = AlertDialog.Builder(it, R.style.AppBaseTheme)
            val builder = AlertDialog.Builder(it)
            val inflater = requireActivity().layoutInflater;

            // Inflate and set the layout for the dialog
            // Pass null as the parent view because its going in the dialog layout
            builder.setView(inflater.inflate(R.layout.create_new_folder_dialog, null))
                    // Add action buttons
                    .setPositiveButton("OK",
                            DialogInterface.OnClickListener { dialog, id ->
                                // create folder ...
                            })
                    .setNegativeButton("Cancel",
                            DialogInterface.OnClickListener { dialog, id ->
                                getDialog()?.cancel()
                            })
            builder.create()


        } ?: throw IllegalStateException("Activity cannot be null")
    }
}

这里是它在另一个片段中的调用:

fun createNewFolderDialog() {

        val supportFragmentManager: FragmentManager = (activity as AppCompatActivity).supportFragmentManager

        val newFragment = CreateNewFolderDialogFragment()

        newFragment.show(supportFragmentManager, "newfolder")


}

这是我在显示对话框时得到的屏幕截图。如您所见,显示了底部导航栏。我想永远防止这种情况出现。

【问题讨论】:

    标签: android kotlin dialog fragment


    【解决方案1】:

    可以通过以下代码隐藏系统导航栏:

    window.decorView.apply {
        // Hides the navigation bar.
        systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    }
    

    隐藏系统导航栏的限制很少,您可以在下面的链接中查看。 来源 - Android Documentation

    您可以使用DialogFragment 类的window 对象,并可以在onStart 方法中的CreateNewFolderDialogFragment 类中设置上述标志,如下面的代码:

    override fun onStart() {
        super.onStart()
        dialog?.window?.decorView?.apply {
            // Hide both the navigation bar
            systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        }
    }
    

    【讨论】:

    • 感谢 Nikhil 的回答,但该代码应该放在哪里?
    • @FabrizioFerrari 对话框对象有一个窗口对象,您可以在 CreateNewFolderDialogFragment 的 onStart() 方法中使用此方法。
    • 它有效,谢谢 Nikhil!只是有一个问题:当我单击对话框中的任何按钮时,会出现该栏,我必须再次单击按钮才能关闭对话框并使该栏再次消失。想好了吗?
    • 我认为此标志的限制很少,您可以查看我在回答中提供的 Android 链接。顺便说一句,我也用代码更新了答案。
    • 完成。再次感谢您!
    【解决方案2】:

    我解决了这个问题:

    override fun onStart() {
        super.onStart()
        dialog?.window?.decorView?.apply {
            systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE or
                        View.SYSTEM_UI_FLAG_FULLSCREEN or
                        View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                        View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
                        View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
                        SYSTEM_UI_FLAG_HIDE_NAVIGATION
        }
    }
    

    感谢@Nikhil 提供的提示!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      相关资源
      最近更新 更多