programing

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

linuxpc 2023. 9. 8. 21:13
반응형

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

프로그래밍 방식으로 작성하는 상대 레이아웃:

 RelativeLayout layout = new RelativeLayout( this );
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);

이제 이 상대 배치에 추가하고 싶은 버튼이 두 개 있습니다.그런데 문제는 Relative Layout 왼쪽에 있는 두 개의 버튼이 서로 겹쳐 있다는 것입니다.

buttonContainer.addView(btn1);
buttonContainer.addView(btn2);

이제 어떻게 프로그래밍적으로 설정할 수 있는지 알고 싶습니다.android:layout_alignParentRight="true" 아니면android:layout_toLeftOf="@id/btn"우리가 xml에서 하는 것처럼 버튼의 속성?

어디든지 액세스할 수 있습니다.LayoutParams코드 사용으로View.getLayoutParams. 당신은 단지 무엇을 알고 있어야만 합니다.LayoutParams당신의 접속.이는 일반적으로 다음 내용물을 점검함으로써 달성됩니다.ViewGroup가 있다면LayoutParams내면의 아이가 바로 그 아이를 사용해야 합니다.당신의 경우는.RelativeLayout.LayoutParams. 당신은 사용하게 될 것이고.

코드를 통해 확인할 수 있습니다.

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

추가용RelativeLayout값이 true이거나 false0거짓과 거짓으로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).

  1. 참조해야 할 버튼에 대한 id를 만들고 id를 만들어야 합니다.btn1.setId(1);
  2. 매개 변수를 사용하여 레이아웃에 매개 변수를 추가할 수 있습니다. 방법은addRule(), 안드로이드 자바 문서를 확인해 보세요.LayoutParams물건.

코틀린 버전:

나중에 통화를 단순화하는 infix 기능과 함께 이 확장자 사용

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)

코틀린에서:

val params = mBinding.tvTotalAmount.layoutParams를 상대 레이아웃으로 지정합니다.배치 매개변수

params.addRule(상대 레이아웃).ALINE_PARENT_END)

mBinding.tvTotalAmount.layoutParams = params

언급URL : https://stackoverflow.com/questions/4638832/how-to-programmatically-set-the-layout-align-parent-right-attribute-of-a-button

반응형