2010-12-17 202 views
21

我有一個文本框,其行爲類似於本地鏈接,點擊它從數據庫獲取圖像並顯示它。它不會一直ping到服務器。android TextView:單擊更改文本顏色

下面是文本視圖中的XML代碼

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

的問題是我希望看到的文本視圖的顏色應爲黃色改變,而不是相同的黑色,

剛像按鈕的行爲,但不是改變背景顏色我想改變文字顏色

+0

https://開頭計算器.com/questions/5371719/change-clickable-textviews-color-on-focus-and-click – CoolMind 2017-10-09 16:42:59

回答

3

您可以創建自己的TextView類,它擴展了Android TextView類並覆蓋onTouchEvent(MotionEvent event)

然後,您可以根據傳遞的MotionEvent修改實例文本顏色。

例如:

@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

我喜歡克里斯蒂安建議,但延長的TextView似乎有點小題大做。此外,他的解決方案無法處理MotionEvent.ACTION_CANCEL事件,因此即使點擊完成後,您的文本仍可能保持選中狀態。

爲了達到這個效果,我實現了我自己的onTouchListener在一個單獨的文件:

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

然後,你可以指定這個給你希望的任何的TextView:

newTextView.setOnTouchListener(new CustomTouchListener());

+1

感謝您的代碼爲我工作。我已經在你的回答中做到了回報,併爲我工作。 – 2013-01-25 11:22:48