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

来源:互联网 发布:万能数据恢复大师6.0 编辑:程序博客网 时间:2024/05/15 23:52

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后面加那几句代码

阅读全文
0 0
原创粉丝点击