2016-10-07 2 views
6
구속

나는 Holder 클래스의 방법은설정 텍스트 색상은 안드로이드

public int getTitleColor(Context context, Item item) { 
    ... 
} 

상관없이 아래와 같이 정의 라이브러리

android:textColor="@{holder.getTitleColor(context, item)}" 

데이터 바인딩을 사용하여 TextView에게 텍스트 색상을 설정하기 위해 노력하고있어 색상 int (@ColorInt) 또는 색상 자원 (@ColorRes)을 반환하면 텍스트는 흰색으로 칠합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

11

에서 전화로 방법을 만들 수 세터가 리소스 ID를 기다리고 있어야합니다.

각 바인드 뷰에 대해 생성 된 Context 참조를 사용하고 described in the DataBinding Dev Guide, 당신이를 가리키는 색상에 자원 ID를 변환하는 데 사용

상황이라는 특수 변수 바인딩에 사용하기 위해 생성

필요에 따라 표현. 컨텍스트의 값은, 루트의 View의 getContext()로부터의 컨텍스트입니다.

사용을 같은 색을 설정하려면 :

<TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@{data.text}" 
      android:textColor="@{context.getColor(data.colorRes)}" 
      /> 
+4

API 레벨이 낮은 디바이스에서이 솔루션을 사용하려고하면 23보다 "java.lang.NoSuchMethodError"를 나타내는 오류가 발생합니다. 이전 버전에 대한 해결책이 필요한 사람들은 다음을 사용하십시오 : ** android : textColor = "@ {context.getResources(). getColor (data.colorRes)}"** – Fer

3

내가 int 당신이이 것을 직관적으로 보일지라도, 헥스 컬러로 해석됩니다 제공하는 것 BindingAdapter

@BindingAdapter({"bind:color"}) 
public static void setFont(TextView textView, Item item) { 
    textView.setTextColor(<set color of your choice>); 
} 

를 사용하여 XML

app:color="@{item}" 
+0

어떤 설명이 왜 내 방법은 작동하지 않는 이유는 무엇입니까? android : textColor에 필요한 int를 반환합니다. 문제의 코드가 무엇이 잘못되었는지 전혀 알 수 없습니다. – tomrozb

+0

당신의 메소드에 어떤 로그를 넣고 그 여부를 체크해라. 왜냐하면 databinding을 사용하면 이와 같은 메소드를 호출 할 수 있고, 리턴 값을 가진 메소드를 호출 할 수 있기 때문이다. –