欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android TextView 给文本中指定片段添加自定义点击事件

程序员文章站 2022-07-14 15:58:54
...
package wq.test;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.view.View;
import android.widget.TextView;

public class AndroidTestActivity extends Activity
{
	private final String stringToShow = "test,test,test,test,test,test,test,test,test,test,test,test," +
			"test,test,test,test,test,test,test,test,test,test,test,test,test,test" +
			",test,test,test,test,test,test,test,test,test,test,test,test,test,test" +
			"testtest test test...";
	private final String readMore = "Read More";

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.main);
		TextView tv = (TextView) this.findViewById(R.id.textView);
		ClickableSpan clickableSpan = new ClickableSpan() {
			@Override
			public void onClick(View widget) {
				if (widget instanceof TextView) {
					((TextView) widget).setText(stringToShow + stringToShow);
				}
			}
		};
		setClickableSpanForTextView(tv, clickableSpan, stringToShow + readMore, stringToShow.length(), stringToShow.length() + readMore.length());
	}

	/**
	 * 
	 * @param tv TextView
	 * @param clickableSpan Click event
	 * @param text Text to show
	 * @param start Start point in text for handle click event
	 * @param end End point in text for handle click event
	 */
	private void setClickableSpanForTextView(TextView tv, ClickableSpan clickableSpan, String text, int start, int end) {
		SpannableString sp = new SpannableString(text);
		sp.setSpan(clickableSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		tv.setText(sp);
		tv.setLinkTextColor(Color.RED);
		tv.setMovementMethod(LinkMovementMethod.getInstance());
		tv.setFocusable(false);
		tv.setClickable(false);
		tv.setLongClickable(false);
	}
}
相关标签: android java