BasePopup icon indicating copy to clipboard operation
BasePopup copied to clipboard

XML设置了固定高度 以及边距,会导致整体下移

Open ChawLoo opened this issue 2 years ago • 4 comments

  • 系统版本(必须)/ System version (required):Android11
  • 库版本(必须)/ Library version (required):3.2.0
  • 问题代码/截图(可选)/ Problem code or screenshot (optional):

image image

<?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)
    }
}

正常的样式应该是这样: image

  • 报错信息(可选)/ Error reporting information (optional):

问题描述/重现步骤请写在这里 Please write the description here. XML设置了固定高度 以及边距,会导致整体下移

ChawLoo avatar Oct 18 '21 05:10 ChawLoo

你好,建议高度使用wrap_content。

造成你这个问题的原因并不是整体下移,而是decor高度即为contentview的高度,而margin是给到contentview,而非decorview,因此导致contentview在高度固定的decorview内往下移动了。

微信截图_20211018154004

razerdp avatar Oct 18 '21 07:10 razerdp

之所以会有这种问题,是因为decorview实际上并不承担margin功能,他的layoutparam是windowmanager#layoutparams,是不会有margin相关的,因此margin只会给到contentview。

这个问题算是一个bug,同时这个bug是之前就知道了的,但不严重。

历史上的迭代曾经修过这个问题,方法是decorview在测量的时候加上了contentview的margin,比如你的demo中,contentview高度是160dp,margin 40dp,那么decorview测量大小会给到 160+40+40 = 240dp,后面决定还是去掉了这种方法,因为这种方法会导致其他奇奇怪怪的问题,因此这个问题在几个版本之前其实已经被迭代掉了。

razerdp avatar Oct 18 '21 07:10 razerdp

不过我有个大胆的想法。。。。decor也给你完全match说不定可以。

razerdp avatar Oct 19 '21 02:10 razerdp

解决方案我是这边处理掉了,对比XML解析的Layout能看出来,多少算是一个Bug,如你所说,问题不大

ChawLoo avatar Oct 19 '21 09:10 ChawLoo