Android TextView はデータを MarkDown 形式でロードし、リッチ テキスト形式をサポートします

はじめに: プロジェクト開発では、改行を太字にしたり、画像リンク調整を追加したりするなど、さまざまなスタイルでテキストを表示する必要がよくあります。現時点では、そのほとんどは Android に付属の Spannable を使用します。特殊なスタイルのフォント、Spanable または HTML も引き続き使用できます。ただし、クライアントが複雑なスタイルのコピーライティングをサポートする必要がある場合、Spannable はあまり柔軟ではありません。この場合、多くの友人はリッチ テキスト HTML、つまり WebView の使用を考えるでしょうが、WebView はパフォーマンスを消費するため、使用には適していません。メッセージ テーブルに . が含まれている場合、誰もが MarkDown を使用することを考えるでしょうが、Android の MarkDown に対するネイティブ サポートはあまり優れていないため、一般的にはライブラリをインポートしてそれを実行します。

オンラインでパッケージ化された優れたライブラリは、RichText と Markwon です。

  1. リッチテキスト:https://github.com/zzhoujay/RichText

Android プラットフォームでのリッチ テキスト パーサー
  • ストリーミング操作

  • 低侵襲性

  • 依存関係が少なく、disklrucacheのみでv4 をサポート

  • HTML および Markdown 形式のテキストをサポート

  • 画像クリックと長押しイベントをサポート

  • リンククリックイベントと長押しイベント

  • ロード中の画像の設定とロードエラーをサポート

  • カスタム ハイパーリンクのクリック コールバックをサポート

  • 画像の幅と高さの修正のサポート

  • GIF画像をサポート

  • Base64 エンコーディング、ローカル ピクチャ、アセット カタログ ピクチャをサポート

  • 自立型カスタムイメージローダー、イメージローダー

  • メモリとディスクのダブルバッファリングをサポート

  • カスタム HTML パーサーのサポートが追加されました

効果:

使用: gradle で参照されるメソッド:

implementation 'com.zzhoujay.richtext:richtext:3.0.7'  //RichText资源库

使用したコード:

リッチテキストなので内容量が多いのでスクロールバーを追加する必要があります(ここでは表示しません)

 <TextView
    android:id="@+id/goods_details"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

Java コード:

 RichText.initCacheDir(GoodDetail.this); //设置缓存目录,不设置会报错
  String goods_details_content = goodsList.getString("goods_details"); //后台获取到的数据资源
 RichText.from(goods_details_content)
         .bind(GoodDetail.this)
         .showBorder(false)
         .size(ImageHolder.MATCH_PARENT, ImageHolder.WRAP_CONTENT)
         .into(goods_details);
 @Override
    protected void onDestroy() {
        super.onDestroy();
        //结束时清空内容
        RichText.clear(GoodDetail.this);
    }

2. 使用: Markwon : https://github.com/noties/Markwon

更新された比較的新しいライブラリ:

Markwonは Android 用のマークダウン ライブラリです。素晴らしいcommonmark-javaライブラリの助けを借りてcommonmark-specに従ってマークダウンを解析し、結果をAndroid ネイティブのSpannables としてレンダリングします。中間ステップとしてHTML は含まれません。WebView は必要ありません。非常に高速で、機能が豊富で、拡張性があります。

これにより、すべての TextView ウィジェット ( TextViewButtonSwitchCheckBoxなど)、トースト、およびスパンド コンテンツを受け入れるその他すべての場所でマークダウンを表示できるようになりますライブラリは、マークダウン コンテンツの表示スタイルに適切なデフォルトを提供しますが、必要に応じて外観を調整するためのあらゆる手段も提供します。commonmark-specにリストされているすべてのマークダウン機能がサポートされています (インライン/ブロック HTML コードマークダウン テーブルイメージ、および構文ハイライトのサポートを含む)。

Markwonにはサンプル アプリケーションが付属していますこれは、各コード サンプルの検索とソース コードが付属するライブラリの使用方法のコレクションです。

バージョン4.2.0以降、 Markwonには、ユーザーの入力として (たとえばEditTextで) マークダウン入力を強調表示するエディター付属しています。

使用: インポートライブラリ:

  implementation "io.noties.markwon:core:4.6.2"
    implementation 'io.noties.markwon:image:4.6.2'
    implementation 'io.noties.markwon:image-glide:4.6.2'

 Android はデモ コード kotlin 記述メソッドを使用します。

 val content = "![RUNOOB 图标](http://static.runoob.com/images/runoob-logo.png)
\n" +
              "\n" +
              "1. 第一项:\n" +
              "    - 第一项嵌套的第一个元素\n" +
              "    - 第一项嵌套的第二个元素\n" +
              "\n" +
              "这是一个链接 [菜鸟教程](https://www.runoob.com)\n"
      val markwon = Markwon.builder(this)
          .usePlugin(GlideImagesPlugin.create(this))
          .usePlugin(GlideImagesPlugin.create(Glide.with(this)))
          .usePlugin(GlideImagesPlugin.create(object : GlideImagesPlugin.GlideStore {
              override fun cancel(target: Target<*>) {
                  Glide.with(this@TestActivity).clear(target);
              }
              override fun load(drawable: AsyncDrawable): RequestBuilder<Drawable> {
                  return Glide.with(this@TestActivity).load(drawable.destination);
              }
          }))
          .build()
      markwon.setMarkdown(textView, content)

上記はマークダウンリッチテキストを表示するデモですが、htmlを表示したい場合も可能ですが、対応するhtml依存ライブラリを追加する必要があります。

おすすめ

転載: blog.csdn.net/Jason_HD/article/details/128851635