Ala*_*anH 194 android android-layout android-relativelayout
是否可以在运行时创建RelativeLayout来以android:layout_below
编程方式设置等效项?
Ric*_*ler 447
是:
RelativeLayout.LayoutParams params= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.BELOW, R.id.below_id);
viewToLayout.setLayoutParams(params);
Run Code Online (Sandbox Code Playgroud)
首先,代码通过指定高度和宽度来创建新的布局参数.该addRule
方法适当地添加了等效的xml android:layout_below
.然后你只需要调用View#setLayoutParams
你想拥有这些参数的视图.
jac*_*ode 139
或者,您可以使用视图当前布局参数并修改它们:
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) viewToLayout.getLayoutParams();
params.addRule(RelativeLayout.BELOW, R.id.below_id);
Run Code Online (Sandbox Code Playgroud)
虽然@jackofallcode答案是正确的,但它可以写成一行:
((RelativeLayout.LayoutParams) viewToLayout.getLayoutParams()).addRule(RelativeLayout.BELOW, R.id.below_id);
Run Code Online (Sandbox Code Playgroud)
具有中缀功能的Kotlin版本
infix fun View.below(view: View) {
(this.layoutParams as? RelativeLayout.LayoutParams)?.addRule(RelativeLayout.BELOW, view.id)
}
Run Code Online (Sandbox Code Playgroud)
然后你可以写:
view1 below view2
Run Code Online (Sandbox Code Playgroud)
或者您可以将其作为普通函数调用:
view1.below(view2)
Run Code Online (Sandbox Code Playgroud)