2010-12-17 24 views
21

Mam pole tekstowe, które zachowuje się jak link lokalny, kliknięcie go powoduje pobranie obrazu z bazy danych i pokazuje go. Nie pinguje do serwera przez cały czas.Android TextView: Zmień kolor tekstu po kliknięciu

Oto kod XML dla widoku tekstowego

<TextView android:layout_marginLeft="2dp" android:linksClickable="true" 
      android:layout_marginRight="2dp" android:layout_width="wrap_content" 
      android:text="@string/Beatles" android:clickable="true" android:id="@+id/Beatles" 
      android:textColor="@color/Black" 
      android:textSize="12dp" android:layout_height="wrap_content" android:textColorHighlight="@color/yellow" android:textColorLink="@color/yellow" android:autoLink="all"></TextView> 

Pytanie brzmi chcę zobaczyć kolor widoku tekstu powinien być zmieniony na żółto, zamiast w tym samym kolorze czarnym,

Wystarczy Podobnie jak zachowanie przycisku ale zamiast zmianę koloru tła chcę zmienić kolor tekstu

+0

https: // stackoverflow .pl/questions/5371719/change-clickable-textviews-color-on-focus-and-click – CoolMind

Odpowiedz

3

można utworzyć własną klasę TextView który rozszerza klasę Android TextView i zastąpić onTouchEvent(MotionEvent event)

Następnie można zmodyfikować kolor tekstu instancji na podstawie przekazanego zdarzenia MotionEvent.

Na przykład:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     // Change color 
    } else if (event.getAction() == MotionEvent.ACTION_UP) { 
     // Change it back 
    } 
    return super.onTouchEvent(event); 
} 
23

Lubię to, co sugeruje, Cristian, ale rozszerzenie TextView wydaje się przesadą. Ponadto jego rozwiązanie nie obsługuje zdarzenia MotionEvent.ACTION_CANCEL, dzięki czemu prawdopodobnie tekst pozostanie wybrany nawet po kliknięciu.

Aby osiągnąć ten efekt, I wdrożone moje własne onTouchListener w oddzielnym pliku:

public class CustomTouchListener implements View.OnTouchListener {  
    public boolean onTouch(View view, MotionEvent motionEvent) { 
    switch(motionEvent.getAction()){    
      case MotionEvent.ACTION_DOWN: 
      ((TextView)view).setTextColor(0xFFFFFFFF); //white 
       break;   
      case MotionEvent.ACTION_CANCEL:    
      case MotionEvent.ACTION_UP: 
      ((TextView)view).setTextColor(0xFF000000); //black 
       break; 
    } 
     return false; 
    } 
} 

Następnie można przypisać to cokolwiek TextView chcesz:

newTextView.setOnTouchListener(new CustomTouchListener());

+1

Dzięki, że Twój kod działa dla mnie. Zrobiłem zwrot true w twojej odpowiedzi i działa dla mnie .. –

Powiązane problemy