[英]How to set the align parent right attribute of TextViews in relative layout programmatically
[英]How to programmatically set the layout_align_parent_right attribute of a Button in Relative Layout?
我有一个以编程方式创建的相对布局:
RelativeLayout layout = new RelativeLayout( this );
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
现在我有两个按钮,我想在这个相对布局中添加它们。 但问题是两个按钮都显示在 RelatiiveLayout 的左侧,彼此重叠。
buttonContainer.addView(btn1);
buttonContainer.addView(btn2);
现在我想知道如何以编程方式设置按钮的android:layout_alignParentRight="true
" 或android:layout_toLeftOf="@id/btn"
属性,就像我们在 Z0F635D0E0F382E6FFF78A 中所做的那样
您可以使用View.getLayoutParams
从代码访问任何LayoutParams
。 您只需要非常清楚您访问的LayoutParams
。 这通常是通过检查包含的ViewGroup
来实现的,如果它有一个LayoutParams
内部孩子,那么这就是你应该使用的。 在您的情况下,它是RelativeLayout.LayoutParams
。 您将使用RelativeLayout.LayoutParams#addRule(int verb)
和RelativeLayout.LayoutParams#addRule(int verb, int anchor)
您可以通过代码访问它:
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)button.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
params.addRule(RelativeLayout.LEFT_OF, R.id.id_to_be_left_of);
button.setLayoutParams(params); //causes layout update
btn1.setId(1);
addRule()
,请查看此LayoutParams
对象的 android java 文档。要添加值为 true 或 false 的RelativeLayout
属性,请为 false 使用0
为 true 使用RelativeLayout.TRUE
:
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) button.getLayoutParams()
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE)
属性是否已经添加并不重要,您仍然使用addRule(verb, subject)
来启用/禁用它。 但是,在 API 17 之后,您可以使用removeRule(verb)
这只是addRule(verb, 0)
的快捷方式。
科特林版本:
将这些扩展与中缀函数一起使用,以简化以后的调用
infix fun View.below(view: View) {
(this.layoutParams as? RelativeLayout.LayoutParams)?.addRule(RelativeLayout.BELOW, view.id)
}
infix fun View.leftOf(view: View) {
(this.layoutParams as? RelativeLayout.LayoutParams)?.addRule(RelativeLayout.LEFT_OF, view.id)
}
infix fun View.alightParentRightIs(aligned: Boolean) {
val layoutParams = this.layoutParams as? RelativeLayout.LayoutParams
if (aligned) {
(this.layoutParams as? RelativeLayout.LayoutParams)?.addRule(RelativeLayout.ALIGN_PARENT_RIGHT)
} else {
(this.layoutParams as? RelativeLayout.LayoutParams)?.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, 0)
}
this.layoutParams = layoutParams
}
然后将它们用作中缀函数调用:
view1 below view2
view1 leftOf view2
view1 alightParentRightIs true
或者您可以将它们用作正常功能:
view1.below(view2)
view1.leftOf(view2)
view1.alightParentRightIs(true)
在Kotlin 中:
val params = mBinding.tvTotalAmount.layoutParams as RelativeLayout.LayoutParams
params.addRule(RelativeLayout.ALIGN_PARENT_END)
mBinding.tvTotalAmount.layoutParams = 参数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.