Ho una lista di semplici elementi di testo. Il TextView a tali elementi si presenta così (è avvolto all'interno di un RelativeLayout
):Impostare il colore del testo Android TextView a livello di codice con setTextColor() rende android: duplicateParentState non valido
<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" />
voglio usare il seguente selettore stato di colore per il testo, che ho chiamato "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>
Normalmente, ovviamente, potrei semplicemente impostarlo sulla proprietà android:textColor
nell'xml, ma in questo caso, ho bisogno di impostare un particolare elemento in modo programmatico su un colore diverso, usando questo selettore ("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>
così mi sono messo il colore del testo nel Adapter (language_name
e selected
sono definiti in precedenza nel codice):
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);
}
E questo funziona bene, tranne che per un problema: il colore del testo non cambia quando il l'oggetto è cliccato. Anche se chiamo setDuplicateParentStateEnabled(true)
sull'articolo subito dopo setTextColor()
, quell'impostazione è completamente ignorata.
Ho provato questo commentando il codice Java che imposta il colore del testo e semplicemente impostandolo in xml, e il selettore funziona bene. Ma se imposto programmaticamente textColor, è completamente incapace di duplicare lo stato genitore.
Qualcuno ha visto questo prima? C'è una soluzione alternativa, o è solo un bug di Android con cui devo convivere?
accettare questo come risposta. è utile. –
Grazie per avermelo ricordato. Fatto. –