设置TextView中文字的超链接

简介: main.xml如下: mainActivity如下: package c.c; import android.

main.xml如下:

<RelativeLayout 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"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="期望有一天不用写代码也可以吃得起馒头" />

</RelativeLayout>


mainActivity如下:

package c.c;
import android.app.Activity;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
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;
/**
 * Demo描述:
 * 为TextView中的文字设置链接,当点击此链接的时候执行相应的操作
 */
public class MainActivity extends Activity {
    private TextView mTextView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}
    private void init() {
    	mTextView=(TextView) findViewById(R.id.textView);
    	String string = mTextView.getText().toString();
    	addUrlSpan(mTextView, string);
    	mTextView.setFocusable(true);
    	mTextView.setMovementMethod(LinkMovementMethod.getInstance());
		catchUrl(mTextView);
	}
    private class TestSpan extends ClickableSpan {
		private String url;
		TestSpan(String url) {
			this.url = url;
		}
		@Override
		public void onClick(View widget) {
			if (url.equals("showinfo")) {
				Toast.makeText(MainActivity.this, "点击了链接", Toast.LENGTH_SHORT).show();
				System.out.println("执行点击链接后的操作");
			}
		}
	}
	private void addUrlSpan(TextView tv, String string) {
		SpannableString spanString = new SpannableString(string);
		URLSpan span = new URLSpan("showinfo");
		int start = string.length() - 4;
		int end = string.length() - 1;
		spanString.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
		tv.setText(spanString);
	}

	private void catchUrl(TextView textView) {
		CharSequence text = textView.getText();
		if (text instanceof Spannable) {
			int end = text.length();
			Spannable sp = (Spannable) textView.getText();
			URLSpan[] urls = sp.getSpans(0, end, URLSpan.class);
			SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text);
			spannableStringBuilder.clearSpans();

			for (URLSpan url : urls) {
				TestSpan testSpan = new TestSpan(url.getURL());
				spannableStringBuilder.setSpan(testSpan, sp.getSpanStart(url),
				sp.getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
			}
			textView.setText(spannableStringBuilder);
		}
	}
	
}


 

相关文章
|
9月前
|
Android开发
|
Android开发 Kotlin 容器
Android彩色文字的超链接实现的封装
最近设计界面的时候碰到这样一个问题,我们经常可以看到这样的一个界面,告知用户的隐私条款和用户协议这样的这个底部彩色文字,而且这些彩色文字都是直接指向相应的链接
98 0
Android彩色文字的超链接实现的封装
|
开发者
文字控件| 学习笔记
快速学习文字控件。
62 0
文字控件| 学习笔记
|
开发者
文字控件|学习笔记
快速学习文字控件
69 0
文字控件|学习笔记
|
XML Android开发 数据格式
Android AlertDialog修改标题、内容、按钮的字体大小和字体颜色
Android AlertDialog修改标题、内容、按钮的字体大小和字体颜色
741 0
Android AlertDialog修改标题、内容、按钮的字体大小和字体颜色
|
Android开发 数据格式 XML
关于 AutoCompleteTextView 不输入文字就显示下拉
由于项目要做一个带有下拉提示的输入框,第一时间就想到了AutoCompleteTextView。但是需求和控件还是有一点出入,公司的需求为:点击输入框即可显示提示数据的数据。
1560 0
|
前端开发
利用TextView中的DrawableTop实现图片在文字上方,点击TextView能实现图片旋转
终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 在今日头条里面Home按钮点击时候,能出现旋转的动画。这里模仿今日头条的Home按钮效果,通过自定义View来实现该效果。
1470 0