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