DataBinding에서 TextView에 입력 필수 태그 추가

4151 단어 AndroidDataBinding

하고 싶은 일


이처럼 태그 옆에 반드시 입력해야 하는 태그*를 붙이려면 요소가 많으면 번거롭다.

BindingAdapter 사용


Binding Adapter를 사용하면 xml attributes로 쓸 수 있습니다.
DataBinding은 kotlin의 확장 함수로서 기존 View에 동작을 부여할 수 있습니다.
적당한 반에 다음과 같은 static 방법을 미리 적어 두세요.내가 했어 DataBindingAttributeUtil 거기 뒀어.
@BindingAdapter("requiredMarkVisible")
public static void requiredMarkVisible(TextView textView, boolean enable) {
    String text = textView.getText().toString();
    String requiredMark = " " + textView.getContext().getString(R.string.required_mark);

    if (enable) {
        textView.setText(Html.fromHtml(text + "<font color=\"#e86242\">" + requiredMark + "</font>"));
    } else {
        String defaultText = text.replace(requiredMark, "");
        textView.setText(defaultText);
    }
}
xml로 이렇게 쓸 수 있습니다.아니오@{true},쓰고 싶은데true좋은 방법이 있나요?있으면 알고 싶어요.
<TextView
    ...
    android:text="@string/name"
    app:requiredMarkVisible="@{true}"/>

보태다


그나저나 왜 false 때 일부러 text.replace(requiredMark, "")일까? 상태에 따라 동적 변화가 필요한지 여부가 달라지기 때문이다.
예를 들어 아래와 같은viewModel의 상태가 바뀌면requiredMarkVisible도 변경을 원할 때다.
<TextView
    ...
    android:text="@string/name"
    app:requiredMarkVisible="@{viewModel.isNameRequired}"/>

감상


xml에string%1$s을 설정할 수 있는 일반적인 Binding Adapter를 만드는 것이 좋을 수도 있습니다.며칠 후에 한번 해볼게요.
그게 다야.

좋은 웹페이지 즐겨찾기