首页 > 解决方案 > 如何删除自定义边距/填充并将其设置回读取 XML 布局中定义的内容

问题描述

在我的 XML 布局中,我像往常一样定义边距/填充:

android:layout_marginBottom="54dp"

然后我单击一个按钮,并通过执行以下操作以编程方式覆盖它:

param.setMargins(0, 0, 0, 0)
textInputLayout.layoutParams = param

现在,我需要再次单击一个按钮,它应该返回到仅读取我在 XML 布局中定义的边距值。如何清除/删除自定义边距?

我希望会有类似的东西

param.clear()

有这样的事情吗?还是从这一点开始我总是需要以编程方式覆盖它?

标签: androidxmlkotlinlayoutmargin

解决方案


第二次单击按钮后,您必须再次设置边距。下面的代码可能会对您有所帮助。

// Instance variable
private var isSecondTime = false

// I have used FrameLayout as my parent, Replace with your parent layout. E.g LinearLayout 

    val params = FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.WRAP_CONTENT,
            FrameLayout.LayoutParams.WRAP_CONTENT
    )

并根据您的要求处理按钮单击。喜欢:

        button.setOnClickListener {
        if (!isSecondTime) {
            isSecondTime = true
            params.setMargins(0, 0, 0, 0)
        } else {
          // setting margin again to 54 dp
            //setMargins(left, top, right, bottom)
            params.setMargins(0, 0, 0, convertDPToPx(54))
        }
        textView.layoutParams = params
    }

转换DPPixel

    private fun convertDPToPx(dip: Int): Int {
    val r: Resources = resources
    return TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            dip.toFloat(),
            r.displayMetrics
    ).toInt()
}

推荐阅读