android - 如何删除自定义边距/填充并将其设置回读取 XML 布局中定义的内容
问题描述
在我的 XML 布局中,我像往常一样定义边距/填充:
android:layout_marginBottom="54dp"
然后我单击一个按钮,并通过执行以下操作以编程方式覆盖它:
param.setMargins(0, 0, 0, 0)
textInputLayout.layoutParams = param
现在,我需要再次单击一个按钮,它应该返回到仅读取我在 XML 布局中定义的边距值。如何清除/删除自定义边距?
我希望会有类似的东西
param.clear()
有这样的事情吗?还是从这一点开始我总是需要以编程方式覆盖它?
解决方案
第二次单击按钮后,您必须再次设置边距。下面的代码可能会对您有所帮助。
// 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()
}
推荐阅读
- ios - 为什么@WidgetBundleBuilder 使所有小部件具有相同的视图?
- javascript - 从 NextJS 中的 _app 访问 React 上下文 API
- javascript - 视口上的旋转数字
- c++ - CMake 中的 Hunter 和 Boost
- java - Java 正则表达式 - 嵌套对象
- plsql - 如何使用 toad 或其他编辑器在 Oracle 中调试包体和触发器
- asp.net-core - 如何在 AzureAD 中为重定向 URL 启用 HTTP 端点?
- sql - 内连接过滤掉想要的结果
- typescript - 具有选定属性的递归嵌套类型
- ruby-on-rails - 如何避免在aasm中两次定义状态