8 Stimmen

Android: TextView textColor ändern, wenn Elternteil fokussiert ist

Ich habe eine TextView innerhalb einer LinearLayout . Die LinearLayout in der Lage ist, den Fokus zu erhalten, und ich möchte, dass die textColor der TextView zu ändern, wenn sie es tut. Ich dachte, mit einer ColorStateList funktionieren würde, aber es scheint, dass die TextView erhält keinen Fokus, wenn die LinearLayout tut. Ich weiß das, weil ich diesen Code ausprobiert habe:

mTextView.setOnFocusChangeListener(new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        Log.d(TAG, "Changed TextView focus to: " + hasFocus);
    }
});

Und nichts wird protokolliert. Ich möchte keine OnFocusChangeListener auf das LinearLayout, um die textColor der TextView Ich denke, dies muss über XML erfolgen. Der Grund dafür ist, dass ich in einer anderen Aktivität eine ExpandableListView mit einem benutzerdefinierten Adapter und benutzerdefinierten Ansichten und Android ändert die textColor s des TextView s (von hell nach dunkel) innerhalb meiner benutzerdefinierten Ansichten, wenn Elemente fokussiert sind.

12voto

Antoine Punkte 146

Dies ist ein alter Beitrag, aber da ich das gleiche Problem hatte, hier ist das XML-Attribut, das ich gefunden habe, um dies zu tun:

android:duplicateParentState="true"

(wird der TextView hinzugefügt, um ihren "fokussierten" Zustand zu ändern, wenn sich der Zustand des Layouts ändert)

4voto

Bostone Punkte 35692

Sie können Ihre TextView in der onFocuseChange-Methode des Listeners von LinearLayout abrufen. Etwas wie

public void onFocusChange(View v, boolean hasFocus) {
    TextView tv = (TextView)v.findViewById(R.id.myTextView);
    tv.setTextColor(R.color.foo);
}

Da Ihre LL mehrere Widgets hosten kann, denke ich, dass es erwartet wird, dass onFocus der LL nicht übertragen wird, auch wenn Sie eine einzelne Steuerung haben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X