BasePopup
BasePopup copied to clipboard
XML设置了固定高度 以及边距,会导致整体下移
- 系统版本(必须)/ System version (required):Android11
- 库版本(必须)/ Library version (required):3.2.0
- 问题代码/截图(可选)/ Problem code or screenshot (optional):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="160dp"
android:layout_margin="40dp"
android:background="@drawable/pop_white_bg"
android:elevation="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/ll_confirm_button"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:padding="10dp"
android:src="@drawable/ic_close" />
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:lines="1"
android:text="温馨提示"
android:textColor="@color/black"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:lines="2"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:text="请确认是否进行此操作?"
android:textColor="@color/gray_txt"
android:textSize="14sp" />
</LinearLayout>
<View
style="@style/divider_horizontal"
android:layout_above="@id/ll_confirm_button" />
<LinearLayout
android:id="@+id/ll_confirm_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<TextView
android:id="@+id/tv_cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:padding="10dp"
android:text="取消"
android:textColor="@color/gray_txt"
android:textSize="16sp"
android:visibility="gone" />
<View
android:id="@+id/v_line"
style="@style/divider_vertical"
android:visibility="gone" />
<TextView
android:id="@+id/tv_confirm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:padding="12dp"
android:text="确认"
android:textColor="@color/theme_color"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
</RelativeLayout>
class CommonConfirmPopupWindow(var context: Context) : BasePopupWindow(context) {
init {
setContentView(R.layout.pop_custom_confirm)
popupGravity = Gravity.CENTER
showAnimation = AnimationUtils.loadAnimation(context, R.anim.pop_middle_show)
dismissAnimation = AnimationUtils.loadAnimation(context, R.anim.pop_middle_dismiss)
}
}
正常的样式应该是这样:
- 报错信息(可选)/ Error reporting information (optional):
问题描述/重现步骤请写在这里 Please write the description here. XML设置了固定高度 以及边距,会导致整体下移
你好,建议高度使用wrap_content。
造成你这个问题的原因并不是整体下移,而是decor高度即为contentview的高度,而margin是给到contentview,而非decorview,因此导致contentview在高度固定的decorview内往下移动了。
之所以会有这种问题,是因为decorview实际上并不承担margin功能,他的layoutparam是windowmanager#layoutparams,是不会有margin相关的,因此margin只会给到contentview。
这个问题算是一个bug,同时这个bug是之前就知道了的,但不严重。
历史上的迭代曾经修过这个问题,方法是decorview在测量的时候加上了contentview的margin,比如你的demo中,contentview高度是160dp,margin 40dp,那么decorview测量大小会给到 160+40+40 = 240dp,后面决定还是去掉了这种方法,因为这种方法会导致其他奇奇怪怪的问题,因此这个问题在几个版本之前其实已经被迭代掉了。
不过我有个大胆的想法。。。。decor也给你完全match说不定可以。
解决方案我是这边处理掉了,对比XML解析的Layout能看出来,多少算是一个Bug,如你所说,问题不大