同一个TextView不同文字的点击事件

本文分享了如何在Android中为同一个TextView的不文字设置独立的点击事件,提供了一个Demo的下载链接,并附带了点击效果的截图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有朋友问到同一个TextView的不同文字点击事件如何实现,由于之前自己做过这方面的东西,但没有把它整理出来,今天上班不是很忙,抽了点时间来整理一个demo,给大家分享一下。好了,废话不多说,上代码和效果图

下载地址链接:

http://download.youkuaiyun.com/detail/hap_gx/5241456
 

package com.example.textviewclick;

import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
    TextView mTextView2;     
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
		setContentView(R.layout.textview);  
        
        mTextView2 = (TextView)findViewById(R.id.text2);  
        /*********** 同一个TextView不同文字的点击事件*******/
		StringBuilder actionText = new StringBuilder();
		actionText
				.append("<a style=\"text-decoration:none;\" href='username'>"
						+ "username:" + " </a>");
		actionText
				.append("隐形人"
						+ "<a style=\"color:blue;text-decoration:none;\" href='singstar'> "
						+ " love" + "</a>");
			actionText.append(" : \"" + "孙燕姿" + "\"");
		mTextView2.setText(Html.fromHtml(actionText.toString()));
		mTextView2.setMovementMethod(LinkMovementMethod
				.getInstance());
		CharSequence text = mTextView2.getText();
		int ends = text.length();
		Spannable spannable = (Spannable) mTextView2.getText();
		URLSpan[] urlspan = spannable.getSpans(0, ends, URLSpan.class);
		SpannableStringBuilder stylesBuilder = new SpannableStringBuilder(text);
		stylesBuilder.clearSpans(); // should clear old spans
		for (URLSpan url : urlspan) {
			TextViewURLSpan myURLSpan = new TextViewURLSpan(url.getURL());
			stylesBuilder.setSpan(myURLSpan, spannable.getSpanStart(url),
					spannable.getSpanEnd(url), spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
		}
		mTextView2.setText(stylesBuilder);
    }
    
    private class TextViewURLSpan extends ClickableSpan {
		private String clickString;

		public TextViewURLSpan(String clickString) {
			this.clickString = clickString;
		}

		@Override
		public void updateDrawState(TextPaint ds) {
		    ds.setColor(MainActivity.this.getResources().getColor(R.color.text_color));
		    ds.setUnderlineText(false); //去掉下划线
		}
		
		@Override
		public void onClick(View widget) {
			if (clickString.equals("username")) {
				Toast.makeText(getApplication(), clickString, Toast.LENGTH_LONG)
				.show();
			} else if (clickString.equals("singstar")) {
				Toast.makeText(getApplication(), clickString, Toast.LENGTH_LONG)
						.show();
			}
		}
	}

}


 

下面是点击的效果图:

    

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值