Zmiana koloru tła TextView po kliknięciu Android

Próbuję zmienić tło widoku tekstowego po kliknięciu.

Na przykład, jeśli widok tekstowy jest kliknięty, tło zmienia się na żółte i pozostaje żółte aż do ponownego kliknięcia. Następnie powraca do domyślnego tła.

Obecnie widok tekstowy tła zmienia się po naciśnięciu, ale wraca do domyślnego po zwolnieniu.

Przeszukałem Internet w poszukiwaniu rozwiązań i przyjrzałem się przede wszystkim rozwiązaniu na temat stackoverflow, wciąż nie ma rozwiązania.

Drawable / selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:drawable="@drawable/circle_on" android:state_enabled="true" android:state_pressed="true"/>
     <item android:drawable="@drawable/circle_on" android:state_enabled="true" android:state_focused="true"/>
     <item android:drawable="@drawable/circle_off"/>
</selector>

Drawable / circle_on:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="oval" >
   <stroke
     android:width="2dp"
     android:color="@color/Gray" >
   </stroke>
   <solid android:color="@color/LightBlue" />
</shape>

Drawable / circle_off:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="oval" >
    <stroke
        android:width="2dp"
        android:color="@color/Gray" >
    </stroke>
    <solid android:color="@color/WhiteSmoke" />
</shape>

Widok tekstu:

  <TextView
                style="@style/RoundText"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:background="@drawable/repeat_selector"
                android:clickable="true"
                android:text="Sun" >
            </TextView>

Styl tekstu:

  <style name="RoundText">
    <item name="android:textColor">#555555</item>
    <item name="android:gravity">center_vertical|center_horizontal</item>
    <item name="android:textSize">15sp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:fontFamily">sans-serif-thin</item>
</style>

Czy ktoś może mi powiedzieć, co robię źle?

Dzięki.

MOJE rozwiązanie:

    public class PlanTextView extends TextView  {

private boolean _stateChanged;
private boolean _selected;

public boolean is_stateChanged() {
    return _stateChanged;
}

public void set_stateChanged(boolean _stateChanged) {
    this._stateChanged = _stateChanged;
}

public boolean is_selected() {
    return _selected;
}

public void set_selected(boolean _selected) {
    this._selected = _selected;
}

public PlanTextView(Context context) {
    super(context);
}

public PlanTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public PlanTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}
 }


<com.plan.views.PlanTextView
                android:id="@+id/mon"
                style="@style/RoundText"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:background="@drawable/circle_off"
                android:clickable="true"
                android:onClick="PlanOnClick"
                android:text="mon" >
 </com.plan.views.PlanTextView>

Czynność

public void PlanOnClick(View v) {
    PlanTextView view = (PlanTextView)v;
    if (view.is_stateChanged()) {
        view.setBackgroundResource(R.drawable.circle_off);
        view.set_selected(false);
    } else {
        view.setBackgroundResource(R.drawable.circle_on);
        view.set_selected(true);
    }
    view.set_stateChanged(!view.is_stateChanged());
}

questionAnswers(4)

yourAnswerToTheQuestion