自定义HtmlTextView,让textView显示多种颜色的文字

xiaoxiao2021-02-27  380

转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/71158181

网络上textView显示各种颜色的文字,都是在java代码里实现的,类似下面这种方式:

比如 (< Android Nougat):

myTextView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>"));

比如(>= Android Nougat):

myTextView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>", Html.FROM_HTML_MODE_LEGACY));

上面的两种方式都是通过java代码来实现的,因为某些textView只是显示文字,你根本不需要得到他的TextView对象,那么是否可以直接在xml就实现好,而不需要在java代码里得到TextView对象,再设置呢。

首先看下效果图:

自定义一个HtmlTextView,如下所示:

package com.test; import android.content.Context; import android.graphics.Canvas; import android.support.v7.widget.AppCompatTextView; import android.text.Html; import android.text.Spanned; import android.util.AttributeSet; /** * Created by harry on 2017/5/3. */ public class HtmlTextView extends AppCompatTextView{ public HtmlTextView(Context context) { super(context); setText(fromHtml(getText().toString())); } public HtmlTextView(Context context, AttributeSet attrs) { super(context, attrs); setText(fromHtml(getText().toString())); } public HtmlTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setText(fromHtml(getText().toString())); } @SuppressWarnings("deprecation") public static Spanned fromHtml(String html) { Spanned result; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { result = Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY); } else { result = Html.fromHtml(html); } return result; } }

valuse/strings.xml里的内容如下所示:

<resources> <string name="app_name">app</string> <string name="screenshots"><![CDATA[ 1.请<font color=#fb3c56>测试</font>本页]]> </string> <string name="choose_pic_to_pay"><![CDATA[ 2.测试测试测试,选择右上角"<font color=#fb3c56>+</font>"号,选择<font color=#fb3c56>测试</font>, 再选择"<font color=#fb3c56>图库</font>".]]> </string> <string name="ensure_pay_success"><![CDATA[ 3.测试后,请点击"<font color=#fb3c56>测试成功</font>"按钮]]> </string> </resources>

最后直接在activity.xml中放入即可,如下所示:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.test.HtmlTextView android:id="@+id/screenshots" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="22dp" android:text="@string/screenshots" /> <com.test.HtmlTextView android:id="@+id/choose_pic_to_pay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:text="@string/choose_pic_to_pay" /> <com.test.HtmlTextView android:id="@+id/ensure_pay_success" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:text="@string/ensure_pay_success" /> </LinearLayout>

通过上面的方式,我们不必去得到TextView的对象,在java代码里将其设置,直接在xml里,就可搞定啦。

转载请注明原文地址: https://www.6miu.com/read-1315.html

最新回复(0)