2016-08-13 6 views
7

我々は我々のアプリでカスタムTagHandlerを持っているなど「UL」用のAndroid Nに呼び出されていないHTMLタグ・ハンドラ、「LI」を

html = "<ul><li>First item</li><li>Second item</li></ul>"; 
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { 
    result = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY, null, new ListHTMLTagHandler(density)); 
} else { 
    //noinspection deprecation 
    result = Html.fromHtml(html, null, new ListHTMLTagHandler(density)); 
} 

TagHandlerhandleTag()機能はulのために呼ばれ、 API-23以降ではliが、API-24(Android N)では呼び出されていません。

+1

[mcve]を入力してください。 – CommonsWare

+0

@CommonsWare申し訳ありません。編集されました。 – okmanideep

+0

_ "... API-24では呼び出されませんでした..." _ Android N端末で実行しましたか? –

答えて

8

Html.javaから、TagHandler.handleTag()がフレームワークがそれ自身を処理しない場合にのみ呼び出されることが明らかです。

現在、フレームワークはそれをうまく処理していないようです。 Android N li tag handling

しかし、それがうまくいっても、それをどうにかカスタマイズしたいと思うでしょう。これに対処する最善の方法は、デフォルトのul,liタグを独自のタグに置き換えることです。フレームワークはカスタムタグを処理しないため、TagHandlerに処理するように求められます。

public static String customizeListTags(@Nullable String html) { 
    if (html == null) { 
    return null; 
    } 
    html = html.replace("<ul", "<" + UL); 
    html = html.replace("</ul>", "</" + UL + ">"); 
    html = html.replace("<ol", "<" + OL); 
    html = html.replace("</ol>", "</" + OL + ">"); 
    html = html.replace("<dd", "<" + DD); 
    html = html.replace("</dd>", "</" + DD + ">"); 
    html = html.replace("<li", "<" + LI); 
    html = html.replace("</li>", "</" + LI + ">"); 
    return html; 
} 

そして、あなたは私が要素とスタイリングのためのより多くのコールバックを含んでAndroidのバージョン間でのHTMLクラスを標準化し、バックポートするために、互換性ライブラリを公開した

html = customizeListTags(html); 
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { 
    result = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY, null, new CustomTagHandler()); 
} else { 
    //noinspection deprecation 
    result = Html.fromHtml(html, null, new CustomTagHandler()); 
} 
+0

これは問題がないわけではありません。たとえば、入力文字列が次のようなものの置き換えられたタグバージョンの場合:

    ...
    ...
タグハンドラは、open ol、open ul、close ul、close olの順にそれらを取得します。 –

+1

@ bran.stratなぜ注文が変わるのですか? – okmanideep

+0

'CustomTagHandler'クラスコードを追加してください。 –

-1

のようなあなたのHTML文字列を処理することができます。

https://github.com/Pixplicity/HtmlCompat

は、具体的には、この呼び出しを与えられた:

Spanned fromHtml = HtmlCompat.fromHtml(context, source, 0, 
     imageGetter, tagHandler, spanCallback); 

あなたは未知のタグのためTagHandlerを実装することに興味がある、とSpanCallback HtmlCompatは、HTMLから作成スパンをカスタマイズするためだろう。

関連する問題