Mam listview prostych elementów tekstowych. TextView w tych pozycji wygląda następująco (jest owinięty wewnątrz RelativeLayout
):Ustawianie kolorów tekstu Android TextView programowo z setTextColor() renderuje android: duplicateParentState invalid
<TextView
android:id="@+id/text_language_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:duplicateParentState="true"
android:textSize="16sp"
android:textStyle="bold" />
chcę użyć następującego selektora stanu kolorów dla tekstu, który nazwałem „dark_list_text_states.xml”:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@android:color/white"/>
<item android:color="@color/dark_list_text"/>
</selector>
Normalnie, oczywiście, mógłbym ustawić tę właściwość na wartość android:textColor
w xml, ale w tym przypadku muszę ustawić programowo jeden konkretny element na inny kolor, używając tego selektora ("blue_text_states.xml"):
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@android:color/white"/>
<item android:color="@color/selected_blue"/>
</selector>
Tak ustawić kolor tekstu w adapterze (language_name
i selected
są zdefiniowane wcześniej w kodzie):
TextView text_language_name = (TextView)view.findViewById(R.id.text_language_name);
if (text_language_name != null) {
text_language_name.setText(language_name);
int text_color = selected
? getResources().getColor(R.color.blue_text_states)
: getResources().getColor(R.color.dark_list_text_states);
text_language_name.setTextColor(text_color);
text_language_name.setDuplicateParentStateEnabled(true);
}
I to działa dobrze, z wyjątkiem jednego problemu: kolor tekstu nie zmienia się, gdy element został kliknięty. Mimo że zadzwonię pod numer setDuplicateParentStateEnabled(true)
bezpośrednio po setTextColor()
, ustawienie to zostanie całkowicie zignorowane.
Przetestowałem to przez skomentowanie kodu Java, który ustawia kolor tekstu i ustawienie go w xml, a selektor działa dobrze. Ale jeśli programowo ustawiam textColor, jest całkowicie niezdolny do powielenia stanu nadrzędnego.
Czy ktoś to widział wcześniej? Czy istnieje obejście, czy jest to tylko błąd Androida, z którym muszę żyć?
przyjąć to jako odpowiedź. to jest pomocne. –
Dziękuję za przypomnienie. Gotowe. –