zoukankan      html  css  js  c++  java
  • 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()中可以改变字体颜色,控件背景色

    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>



    效果图如下:



  • 相关阅读:
    NET 4.+ & .NET CORE 高性能 轻量级 ORM框架,众多.NET框架中最容易使用的数据库访问技术
    mvc cookie
    正则表达式捕获带有属性的标签
    IT第十天
    代码段
    关于java.lang中String类的学习:最特殊的数据类型(持续整理中......)
    关于String.concat()方法和StringBuffer.append()方法的学习:方法是如何追加字符到源字符串的
    关于String和StringBuffer的理解问题:指针、变量的声明、变量的值的变化
    关于字符串检索、关键词的搜索问题:已搜索过的部分不会再被纳入下次搜索的范围内
    IT第九天
  • 原文地址:https://www.cnblogs.com/yishaochu/p/5078605.html
Copyright © 2011-2022 走看看