상대적 레이아웃에서 버튼의 layout_align_parent_right 속성을 프로그래밍 방식으로 설정하는 방법은 무엇입니까? );

프로그래밍 방식으로 만드는 상대 레이아웃이 있습니다.

 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


답변

  1. 참조해야 할 버튼을 만들고 ID를 지정해야합니다.
    btn1.setId(1);
  2. params 변수를 사용하여 레이아웃에 매개 변수를 추가 할 수 있습니다. 메서드가 있다고 생각 합니다. addRule()LayoutParams객체에 대한 Android Java 문서를 확인하십시오
    .

답변

RelativeLayout값이 true 또는 false 인 속성을 추가 하려면 0false 및 RelativeLayout.TRUEtrue로 사용하십시오.

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)


답변