TextView中的部分文字响应点击事件

简介:

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()中可以改变字体颜色,控件背景色

  1. public class MainActivity extends Activity {  
  2.     @Override  
  3.     public void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         setContentView(R.layout.activity_main);  
  6.           
  7.         TextView textView=(TextView) findViewById(R.id.hello_world);  
  8.           
  9.         //ds.setColor()设定的是span超链接的文本颜色,而不是点击后的颜色,  
  10.         //点击后的背景颜色(HighLightColor)属于TextView的属性,  
  11.         //Android4.0以上默认是淡绿色,低版本的是黄色。解决方法就是通过重新设置文字背景为透明色  
  12.         textView.setHighlightColor(getResources().getColor(android.R.color.transparent));  
  13.           
  14.         SpannableString spanableInfo = new SpannableString("这是一个测试"+": "+"点击我");  
  15.         spanableInfo.setSpan(new Clickable(clickListener),8,11,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  16.         textView.setText(spanableInfo);  
  17.         textView.setMovementMethod(LinkMovementMethod.getInstance());  
  18.     }  
  19.       
  20.     private OnClickListener clickListener=new OnClickListener() {  
  21.         @Override  
  22.         public void onClick(View v) {  
  23.             Toast.makeText(MainActivity.this"点击成功....",Toast.LENGTH_SHORT).show();  
  24.         }  
  25.     };  
  26.   
  27.     class Clickable extends ClickableSpan{  
  28.         private final View.OnClickListener mListener;  
  29.   
  30.         public Clickable(View.OnClickListener l) {  
  31.             mListener = l;  
  32.         }  
  33.   
  34.         /** 
  35.          * 重写父类点击事件 
  36.          */  
  37.         @Override  
  38.         public void onClick(View v) {  
  39.             mListener.onClick(v);  
  40.         }  
  41.   
  42.         /** 
  43.          * 重写父类updateDrawState方法  我们可以给TextView设置字体颜色,背景颜色等等... 
  44.          */  
  45.         @Override  
  46.         public void updateDrawState(TextPaint ds) {  
  47.             ds.setColor(getResources().getColor(R.color.video_comment_like_number));  
  48.         }  
  49.     }  
  50. }  



布局文件:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"   
  5.     android:orientation="vertical">  
  6.   
  7.     <TextView  
  8.         android:id="@+id/hello_world"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:textSize="20sp" />  
  12.   
  13. </LinearLayout>  



效果图如下:


目录
相关文章
|
9月前
|
Java Android开发
TextView设置跑马灯效果
TextView设置跑马灯效果
74 0
|
Android开发
Android 如何实现带滚动条的TextView,在更新文字时自动滚动到最后一行
1、主布局代码:       2、主要代码 :   package com.android09; import android.
2390 0
|
7月前
一个textview显示不同zize大小的文本
一个textview显示不同zize大小的文本
32 0
|
7月前
EditText 的一些软键盘属性和回调
EditText 的一些软键盘属性和回调
46 0
|
Android开发
|
XML 程序员 Android开发
【Android开发】三种方法实现Button点击事件响应
【Android开发】三种方法实现Button点击事件响应
556 0
toolbar改变返回按钮方法
toolbar改变返回按钮方法
190 0