TextView实现富文本
这个的话呢其实也是不是太难的一个操作,就是基本的加入文本,但是加入的不是简单的String类型,而是实现CharSquence接口的一个类。
这个好像就是用来添加富文本的,首先我们先配置XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.android_stduy1.MainActivity" >
<TextView android:id="@+id/Tv_One" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/Tv_Two" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/Tv_One" android:autoLink="all" />
</RelativeLayout>
|
我们注意android:autoLink="all"
这个东西就是一个配置富文本框的一个属性,可以有下面这几个值:
设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)
我们这里填写all就是所有的,而且之个东西支持HTML5的代码。
看我们的代码是如何编写的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| private TextView Tv_One; private TextView Tv_Two; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Tv_One = (TextView) findViewById(R.id.Tv_One); Tv_Two = (TextView) findViewById(R.id.Tv_Two); String text1 = "<font color = 'red'>Hello Wker</font>"; text1 += "<a href = 'https://www.baidu.com'>百度</a>"; Tv_One.setText(Html.fromHtml(text1)); Tv_One.setMovementMethod(LinkMovementMethod.getInstance()); Tv_Two.setMovementMethod(LinkMovementMethod.getInstance()); Tv_Two.setText("MyWeb:https://www.baidu.com 我的电话:13131313131"); }
|
首先我们获取了这两个控件,然后我们配置一个HTML的一个语句,简单的就可以了,然后我们通过Html.fromHtml(text1)
来获取一个Spanned的一个值,这个值就是实现了CharSquence接口,我们将它传过去,然后在设置可以产生连接,这个方法就是这么用,设置好之后我们就可以看一下效果:
但是需要注意的是我们之后XML中进行配置了我们才能可以解析,不配置的话呢只能解析一些简单的电话号网站之类的。并且当我们点击了蓝色的这些东西之后我们就能跳转到我们想要的地方去。