2016-08-13 11 views
7

के लिए एंड्रॉयड एन में नहीं बुलाया हैंडलर हम बुलेट की गई सूची के लिए हमारे अनुप्रयोग में एक कस्टम TagHandler आदिHTML टैग "उल", "ली"

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)); 
} 

मेरी TagHandler में handleTag() समारोह ul के लिए कहा जाता है, एपीआई -23 में li और नीचे लेकिन एपीआई -24 (एंड्रॉइड एन) में नहीं कहा जाता है।

+1

कृपया एक [एमसीवी] प्रदान करें। – CommonsWare

+0

@CommonsWare क्षमा करें। संपादित। – okmanideep

+0

_ "... लेकिन एपीआई -24 में नहीं बुलाया गया ..." _ क्या आपने इसे एंड्रॉइड एन डिवाइस पर चलाया था? –

उत्तर

8

Html.java के source से यह स्पष्ट है कि 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; 
} 

और फिर आप अपने 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

के साथ एमुलेटर और नेक्सस 5 एक्स यह इसके बिना किसी समस्या के भी है। उदाहरण के लिए यदि आपकी इनपुट स्ट्रिंग इस

    की तरह कुछ प्रतिस्थापित टैग संस्करण है ...
    ...
टैग हैंडलर उन्हें इस क्रम में प्राप्त करेगा: ओपन ओएल, ओपन उल, क्लोज उल, क्लोज ओएल। –

+1

@ bran.strat आदेश क्यों बदल जाएगा? – okmanideep

+0

क्या आप कृपया अपना 'कस्टमटागहैंडलर' क्लास कोड –

-1

जैसे मैं एक संगतता पुस्तकालय प्रकाशित किया है मानकीकरण और Android संस्करण जो तत्वों और स्टाइल के लिए और अधिक कॉलबैक शामिल भर में एचटीएमएल वर्ग backport करने की प्रक्रिया कर सकते हैं:

https://github.com/Pixplicity/HtmlCompat

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

आप अज्ञात टैग के लिए TagHandler को लागू करने में रुचि होगी, और कहा कि HtmlCompat HTML से बनाता है Spans अनुकूलित करने के लिए SpanCallback:विशेष रूप से, इस मंगलाचरण दिया।

संबंधित मुद्दे