关于android中TextView的富文本

首先 这个 富文本,简单来说,就是可以对文本中的文字操作的一些类的使用,

比如,超链接了,识别,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>

java代码如下

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);
        }

    }
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值