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

本文介绍了一种自定义Dialog的方法,使其能在横屏模式下依然保持从屏幕底部弹出,并充满整个屏幕宽度。通过调整Dialog的样式及布局参数,确保了在不同屏幕方向下都能正常显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="loveshow_AnimBottom" parent="@android:style/Animation.Translucent">
        <item name="android:windowEnterAnimation">@anim/loveshow_push_bottom_in</item>
        <item name="android:windowExitAnimation">@anim/loveshow_push_bottom_out</item>
    </style>


    <style name="loveshow_DialogStyleBottomTranslut" parent="android:Theme.Dialog">
        <item name="android:windowAnimationStyle">@style/loveshow_AnimBottom</item>
        <item name="android:windowFrame">@null</item>
        <!-- 边框 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 是否浮现在activity之上 -->
        <item name="android:windowIsTranslucent">true</item>
        <!-- 半透明 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 无标题 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 背景透明 -->
        <item name="android:backgroundDimEnabled">false</item>
        <!-- 模糊 -->
    </style>


</resources>

在使用的自定义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后面加那几句代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值