• 一手遮天 Android


    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

    一手遮天 Android - view(文本类): TextView 的 html 支持

    示例如下:

    /view/text/TextViewDemo4.java

    /**
     * TextView - 文本显示控件
     *
     * 演示 TextView 的 html 支持
     */
    
    package com.webabcd.androiddemo.view.text;
    
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.text.Html;
    import android.text.method.LinkMovementMethod;
    import android.widget.TextView;
    
    import com.webabcd.androiddemo.R;
    import com.webabcd.androiddemo.view.text.utils.HelloTagHandler;
    import com.webabcd.androiddemo.view.text.utils.MyFontTagHandler;
    import com.webabcd.androiddemo.view.text.utils.URLImageGetter;
    
    public class TextViewDemo4 extends AppCompatActivity {
    
        private TextView _textView1;
        private TextView _textView2;
        private TextView _textView3;
        private TextView _textView4;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_view_text_textviewdemo4);
    
            _textView1 = (TextView) findViewById(R.id.textView1);
            _textView2 = (TextView) findViewById(R.id.textView2);
            _textView3 = (TextView) findViewById(R.id.textView3);
            _textView4 = (TextView) findViewById(R.id.textView4);
    
            // TextView 解析并显示 html(TextView 仅支持部分 html 标签)
            sample1();
            // TextView 显示 html 中的 img(img 的 src 来自一个 url)
            sample2();
            // TextView 显示自定义 html 标签
            sample3();
            // TextView 显示自定义 html 标签(处理标签属性)
            sample4();
        }
    
        // TextView 解析并显示 html(TextView 仅支持部分 html 标签)
        private void sample1() {
            String html = "";
            // 支持 h1, h2, h3, h4, h5, h6
            html += "<h6>webabcd</h6>";
            // 支持 p, a
            html += "<p><a href='http://webabcd.cnblogs.com'>webabcd blog</a></p>";
            // 支持 b, i, u, big, small, strong, em
            html += "<b>bbb</b><i>iii</i><u>uuu</u><big>big</big><small>small</small><strong>strong</strong><em>em</em><br />";
            // 支持 sup(上标), sub(下标)
            html += "hello<sup>sup</sup><sub>sub</sub><br />";
            // 支持 font(属性仅支持 color 和 face)
            html += "<font color='#ff0000'>font color</font>";
            // 支持 blockquote
            html += "<blockquote>blockquote</blockquote>";
    
            // 让 TextView 解析并显示指定的 html
            _textView1.setText(Html.fromHtml(html));
            // 允许点击 html 中的链接并跳转
            _textView1.setMovementMethod(LinkMovementMethod.getInstance());
        }
    
        // TextView 显示 html 中的 img(img 的 src 来自一个 url)
        private void sample2() {
            String html = "<img src='https://www.baidu.com/img/bd_logo.png' />"; // 一个 http 图片
            html += "<img src='" + R.drawable.img_sample_son + "' />"; // 一个 drawable 图片
    
            // 在 setText() 中指定一个自定义 ImageGetter 去解析并显示 img 标签
            URLImageGetter urlImageGetter = new URLImageGetter(_textView2, this);
            _textView2.setText(Html.fromHtml(html, urlImageGetter, null));
        }
    
        // TextView 显示自定义 html 标签
        private void sample3() {
            String html = "<hello>webabcd</hello>";
    
            // 在 setText() 中指定一个自定义 TagHandler 去解析并显示自定义标签(本例是 <hello /> 标签)
            HelloTagHandler helloTagHandler = new HelloTagHandler();
            _textView3.setText(Html.fromHtml(html, null, helloTagHandler));
        }
    
        // TextView 显示自定义 html 标签(处理标签属性)
        private void sample4() {
            // TextView 是不支 font 的 size 的,本例用于演示如何在自定义标签中处理 size 属性
            String html = "<myfont size='32px'>webabcd</myfont>";
    
            // 在 setText() 中指定一个自定义 TagHandler 去解析并显示自定义标签(本例是 <myfont /> 标签)
            MyFontTagHandler myFontTagHandler = new MyFontTagHandler();
            _textView4.setText(Html.fromHtml(html, null, myFontTagHandler));
        }
    }
    
    

    /layout/activity_view_text_textviewdemo4.xml

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/orange">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
    
            <TextView
                android:id="@+id/textView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"/>
    
            <TextView
                android:id="@+id/textView2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"/>
    
            <TextView
                android:id="@+id/textView3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"/>
    
            <TextView
                android:id="@+id/textView4"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"/>
    
        </LinearLayout>
    
    </ScrollView>
    
    

    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

  • 相关阅读:
    SQLSERVER 的表分区(水平) 操作记录2
    GraphQl in ASP.NET Core
    初始认知学习 .net core 逐步加深
    C# 关于使用JavaScriptSerializer 序列化与返序列化的操作
    Nginx、IIS 相关命令
    SqlServer:查询指定表所有外键关联表信息
    centos 重启宝塔命令
    c# 根据日志中的方法信息,反射再次执行相关方法
    jackson 下载地址记录
    【设计模式】六大原则
  • 原文地址:https://www.cnblogs.com/webabcd/p/android_view_text_TextViewDemo4.html
Copyright © 2020-2023  润新知