Change TextView background color on android click

I am trying to change the textview background when clicked.

For example, if you click a text box, the background changes to yellow and remains yellow until it clicks again. Then it returns to the original background.

There is currently a text change in the background changes when clicked, but the default is reset.

I have an Internet search for solutions and look most at stackoverflow solution, but still no solution.

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> 

TextView:

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

Text Style:

  <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> 

Can someone please tell me what I'm doing wrong.

Thanks.

My decision:

  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> 

activity

 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()); } 
+6
source share
4 answers

If you click on a text image, the background changes to yellow and remains yellow until it clicks again. Then it returns to the original background.

This is a logical question, because you need to keep the current state of the click in your client (blind coding):

 textView.setOnClickClickListener(new View.OnClickListener() { private boolean stateChanged; public void onClick(View view) { if(stateChanged) { // reset background to default; textView.setBackgroundDrawable(circleOffDrawable); } else { textView.setBackgroundDrawable(circleOnDrawable); } stateChanged = !stateChanged; } }); 

To improve the response, you should keep the stateChanged flag in activity and keep its value in the replenishment of activity - if the user rotates the action. (Save the flag to onSaveInstanceState and restore it to onCreate if its parameter is non-zero.)

+6
source

In addition to the answers above, try also this piece of code.

  <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape> <gradient android:endColor="#AD1F2D" android:startColor="#AD1F2D" /> </shape> </item> <item android:state_focused="true"> <shape> <gradient android:endColor="#ff4b46" android:startColor="#ff4b46" /> </shape> </item> <item> <shape> <gradient android:endColor="#ff4b46" android:startColor="#ff4b46" /> </shape> </item> </selector> 

I hope this will be useful to everyone.

+5
source

use onclicklistner () for Textview

In your listener use

  txt.setBackgroundColor(Color.RED); 

for instance

  if(count==1) { txt.setBackgroundColor(Color.YELLOW); count=0; } else if(count==0) { txt.setBackgroundColor(Color.RED); count==1; } 
+1
source

In the onCreate() method

 LinearLayout(or Whatever layout you are using) ll = (LinearLayout)findViewById(R.id.mainlay); 

and set the listener to textview :

 TextView tv1 = (TextView)findViewById(R.id.maintext); tv1.setOnClickListener(this); 

And finally, click:

 @Override public void onClick(View v) { ll.setBackgroundColor(whatever color); or If you want to change the text background color, tv1.setBackground(whatevercolor); } 

Hope this helps.

0
source

Source: https://habr.com/ru/post/954325/


All Articles