首先 这个 富文本,简单来说,就是可以对文本中的文字操作的一些类的使用,
比如,超链接了,识别,html代码了,接下来举例如下,效果图
第一个textview,点击跳转,第二个是,点击,就是点击事件的处理,第三个就是自动识别,别打开相应的工具,想,默认浏览器,默认拨号器,默认emal了
布局如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.ding.zi.testidea.MainActivity">
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="超链接" />
<TextView
android:id="@+id/textview2"
android:layout_marginTop="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="文字中间部分的点击!" />
<!--必须带有,autoLink,这个属性,切在代码写依然不行-->
<TextView
android:id="@+id/textview3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoLink="email|phone|web"
android:text="15738962542" />
</LinearLayout>
package com.ding.zi.testidea;
import android.os.Parcel;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.UnderlineSpan;
import android.text.util.Linkify;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initTv1();
initTV2();
initTv3();
}
/**
* 对tv1的实现,即使超链接
*/
private void initTv1() {
String str = "<html><head></head><body>哈哈哈 超链接是<a href=\"http://www.baidu.com\" " +
"class=\"referer\">@天天</a>我赞你了哦</body></html>";
textView = (TextView) findViewById(R.id.textview);
textView.setText(Html.fromHtml(str));
textView.setMovementMethod(LinkMovementMethod.getInstance());//默认打开浏览器.跳转到默认浏览器
}
/**
* 对tv2文字中间部分开始,设置点击事件
*/
private void initTV2() {
TextView tv2 = (TextView) findViewById(R.id.textview2);
String str = "点击@我跳转";
//创建Spannablestring
SpannableString spannableString = new SpannableString(str);
//对文本的中间部分设置点击事件
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(getApplicationContext(), "点击时候,成功!",
Toast.LENGTH_LONG).show();
}
}, 2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv2.setText(spannableString);
//设置,点击后成功跳转
tv2.setMovementMethod(LinkMovementMethod.getInstance());
}
/**
* 设置自动识别的tv
* 去除下划线
*/
private void initTv3() {
TextView tv3 = (TextView) findViewById(R.id.textview3);
// ClickableSpan//去除下划线的类
NoUnderLineSpan underLineSpan = new NoUnderLineSpan();
if (tv3.getText() instanceof Spannable) {//是富文本
Spannable s = (Spannable) tv3.getText();
s.setSpan(underLineSpan, 0, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
//去除下划线的类
public static class NoUnderLineSpan extends UnderlineSpan {
public NoUnderLineSpan() {
}
public NoUnderLineSpan(Parcel src) {
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setUnderlineText(false);
}
}
}