프로그래밍 방식으로 만드는 상대 레이아웃이 있습니다.
RelativeLayout layout = new RelativeLayout( this );
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
이제이 상대 레이아웃에 추가하고 싶은 두 개의 버튼이 있습니다. 그러나 문제는 두 버튼이 RelatiiveLayout의 왼쪽에 서로 겹쳐서 표시되고 있다는 것입니다.
buttonContainer.addView(btn1);
buttonContainer.addView(btn2);
이제 XML 에서처럼 android:layout_alignParentRight="true
“또는 android:layout_toLeftOf="@id/btn"
버튼의 속성을 프로그래밍 방식으로 설정하는 방법을 알고 싶습니다 .
답변
을 LayoutParams
사용하여 코드에서 모든 내용에 액세스 할 수 있습니다 View.getLayoutParams
. 당신은 단지 당신이 무엇 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
답변
- 참조해야 할 버튼을 만들고 ID를 지정해야합니다.
btn1.setId(1);
- params 변수를 사용하여 레이아웃에 매개 변수를 추가 할 수 있습니다. 메서드가 있다고 생각 합니다.
addRule()
이LayoutParams
객체에 대한 Android Java 문서를 확인하십시오
.
답변
RelativeLayout
값이 true 또는 false 인 속성을 추가 하려면 0
false 및 RelativeLayout.TRUE
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
}
그런 다음이를 infix 함수 호출로 사용하십시오.
view1 below view2
view1 leftOf view2
view1 alightParentRightIs true
또는 일반 기능으로 사용할 수 있습니다.
view1.below(view2)
view1.leftOf(view2)
view1.alightParentRightIs(true)