【问题标题】:How to remove custom margins / padding and set it back to reading what was defined in the XML Layout如何删除自定义边距/填充并将其设置回读取 XML 布局中定义的内容
【发布时间】:2021-07-17 12:10:06
【问题描述】:

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

android:layout_marginBottom="54dp"

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

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

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

我希望会有类似的东西

param.clear()

有这样的吗?还是从现在开始我总是需要以编程方式覆盖它?

【问题讨论】:

    标签: android xml kotlin layout margin


    【解决方案1】:

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

    // 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
        }
    

    将DP 转换为Pixel:

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

    【讨论】:

    • 谢谢。我觉得你不能只清除自定义边距有点傻。但现在我想我们被这种解决方案所困。顺便说一句,它有效。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多