dialog居于底部并使得宽度占满整个屏幕宽度

dialog居于底部并使得宽度占满整个屏幕宽度

在开发过程中遇到使用BottomShellDailog的时候,在竖屏情况下能够正常从底部弹起并处于底部,但是在横屏情况下它就显示不全了,找了很多方法都没解决,后来就修改方案,直接让我自定义的dialog继承系统的dialog,然后在自定义dialog show的时候调用以下方法,就完美解决了,全部代码如下:

自定义的dialog

class LivePullBackDialog(context: Context, private val onClickToBack:()-> Unit)
    : Dialog(context, R.style.loveshow_DialogStyleBottomTranslut) {
//    : BottomSheetDialog(context) {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dialog_live_back)
        window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)

        back.setOnClickListener {
            if (this.isShowing) {
                this.dismiss()
            }
            onClickToBack.invoke()
        }
        continues.setOnClickListener {
            if (this.isShowing) {
                this.dismiss()
            }
        }
    }
}

dialog的style如下:

version="1.0" encoding="utf-8"?>


    


    


在使用的自定义dialog的地方使用如下代码:

            mPullBackDialog.show()
            val window = mPullBackDialog.window
            if (window != null){
                window.decorView.setPadding(0,0,0,0)
                var attr = window.attributes
                if (attr != null){
                    attr.height = ViewGroup.LayoutParams.WRAP_CONTENT
                    attr.width = ViewGroup.LayoutParams.MATCH_PARENT
                    attr.gravity = Gravity.BOTTOM
                }
                window.attributes = attr
            }

在mPullBackDialog.show()后面加这一段代码,可以实现从底部弹窗,并且占据整个屏幕宽度的对话框,因为我发现dialog 默认的样式@Android:style/Theme.Dialog 对应的style 有pading属性,所以
win.getDecorView().setPadding(0, 0, 0, 0); 就能够水平占满了在此记录之,以备重用。

后来发现直接使用如下方法就能解决问题:

class LivePullBackDialog(context: Context, private val onClickToBack:()-> Unit)
    : Dialog(context, R.style.loveshow_DialogStyleBottomTranslut) {
//    : BottomSheetDialog(context) {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dialog_live_back)
        window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
        window.attributes.gravity = Gravity.BOTTOM

        back.setOnClickListener {
            if (this.isShowing) {
                this.dismiss()
            }
            onClickToBack.invoke()
        }
        continues.setOnClickListener {
            if (this.isShowing) {
                this.dismiss()
            }
        }
    }
}

window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
window.attributes.gravity = Gravity.BOTTOM
这两句话就能完美解决,不用再show后面加那几句代码

你可能感兴趣的:(android开发从0开始)