TextView中的部分文字響應點選事件
阿新 • • 發佈:2019-02-12
TextView是android常用的控制元件,經常要顯示不同文字的大小,顏色,......今天要實現這樣這樣一個需求,TextView某段內容顯示的文字顏色不一樣,並且點選區域只能是改變了顏色的字.
1.給TextView設定設定文字背景為透明色,不然會有點選選中效果. 我參考的部落格地址:http://www.cnblogs.com/sxzheng/p/4245873.html
2.SpannableString拼接字串,給8到11的字串用Clickable物件去處理
1).Clickable物件繼承ClickableSpan 實現了onclick()跟updateDrawState()方法
2).onclick()處理點選事件,updateDrawState()中可以改變字型顏色,控制元件背景色
佈局檔案:public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView=(TextView) findViewById(R.id.hello_world); //ds.setColor()設定的是span超連結的文字顏色,而不是點選後的顏色, //點選後的背景顏色(HighLightColor)屬於TextView的屬性, //Android4.0以上預設是淡綠色,低版本的是黃色。解決方法就是通過重新設定文字背景為透明色 textView.setHighlightColor(getResources().getColor(android.R.color.transparent)); SpannableString spanableInfo = new SpannableString("這是一個測試"+": "+"點選我"); spanableInfo.setSpan(new Clickable(clickListener),8,11,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(spanableInfo); textView.setMovementMethod(LinkMovementMethod.getInstance()); } private OnClickListener clickListener=new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "點選成功....",Toast.LENGTH_SHORT).show(); } }; class Clickable extends ClickableSpan{ private final View.OnClickListener mListener; public Clickable(View.OnClickListener l) { mListener = l; } /** * 重寫父類點選事件 */ @Override public void onClick(View v) { mListener.onClick(v); } /** * 重寫父類updateDrawState方法 我們可以給TextView設定字型顏色,背景顏色等等... */ @Override public void updateDrawState(TextPaint ds) { ds.setColor(getResources().getColor(R.color.video_comment_like_number)); } } }
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" /> </LinearLayout>
效果圖如下: