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




    效果图如下:

  • 相关阅读:
    git
    composer
    laravel saas
    算法模板-01背包
    GMP-C/C++(大数库)使用方法
    算法模板-容斥原理
    算法模板-欧拉函数
    算法模板-素数判断/素数筛法
    算法模板-质因数分解
    算法模板-快速幂取模
  • 原文地址:https://www.cnblogs.com/zhangyubao/p/7011070.html
Copyright © 2020-2023  润新知