Skip to content

Commit b89d3a8

Browse files
committed
fix(android): custom fromHTML to add more tags support
1 parent 87599fd commit b89d3a8

File tree

3 files changed

+706
-3
lines changed

3 files changed

+706
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto">
4+
5+
<font
6+
android:font="@font/cabinsketch_regular"
7+
android:fontStyle="normal"
8+
android:fontWeight="400"
9+
10+
app:font="@font/cabinsketch_regular"
11+
app:fontStyle="normal"
12+
app:fontWeight="400" />
13+
14+
<font
15+
android:font="@font/cabinsketch_bold"
16+
android:fontStyle="normal"
17+
android:fontWeight="700"
18+
19+
app:font="@font/cabinsketch_bold"
20+
app:fontStyle="normal"
21+
app:fontWeight="700" />
22+
23+
</font-family>

Diff for: plugin/platforms/android/java/com/nativescript/label/Font.java

+32-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.content.Context;
44
import android.content.res.AssetManager;
5+
import android.graphics.Color;
56
import android.graphics.Typeface;
67
import android.os.Build;
78
import android.text.SpannableStringBuilder;
@@ -12,7 +13,14 @@
1213
import android.text.style.TypefaceSpan;
1314
import android.util.Log;
1415

16+
import org.xml.sax.InputSource;
17+
import org.xml.sax.SAXException;
18+
import org.xml.sax.XMLReader;
19+
import org.xml.sax.helpers.XMLReaderFactory;
20+
1521
import java.io.File;
22+
import java.io.IOException;
23+
import java.io.StringReader;
1624
import java.util.ArrayList;
1725
import java.util.HashMap;
1826
import java.util.StringTokenizer;
@@ -201,7 +209,8 @@ public static SpannableStringBuilder stringBuilderFromHtmlString(Context context
201209
if (htmlString == null) {
202210
return null;
203211
}
204-
Spanned spannedString = HtmlCompat.fromHtml(htmlString, HtmlCompat.FROM_HTML_MODE_COMPACT);
212+
// Spanned spannedString = HtmlCompat.fromHtml(htmlString, HtmlCompat.FROM_HTML_MODE_COMPACT);
213+
CharSequence spannedString = fromHtml(htmlString, context, false);
205214
SpannableStringBuilder builder = new SpannableStringBuilder(spannedString);
206215

207216
TypefaceSpan[] spans = builder.getSpans(0, builder.length(), android.text.style.TypefaceSpan.class);
@@ -215,8 +224,8 @@ public static SpannableStringBuilder stringBuilderFromHtmlString(Context context
215224
if (split.length > 1) {
216225
style = split[1];
217226
}
218-
Typeface typeface = createTypeface(context, fontFolder, fontFamily, style == "bold" ? "bold" : "normal",
219-
style == "bold", style == "italic");
227+
Typeface typeface = createTypeface(context, fontFolder, fontFamily, style.equals("bold") ? "bold" : "normal",
228+
style.equals("bold"), style.equals("italic"));
220229

221230
if (typeface == null) {
222231
typeface = Typeface.create(fontFamily, Typeface.NORMAL);
@@ -338,4 +347,24 @@ public static SpannableStringBuilder stringBuilderFromFormattedString(Context co
338347

339348
return ssb;
340349
}
350+
351+
public static CharSequence fromHtml(CharSequence html, Context context, final boolean disableLinkStyle) {
352+
if (html instanceof String) {
353+
XMLReader xmlReader;
354+
try {
355+
xmlReader = XMLReaderFactory.createXMLReader ("org.ccil.cowan.tagsoup.Parser");
356+
HtmlToSpannedConverter converter =
357+
new HtmlToSpannedConverter(context, null, null, disableLinkStyle);
358+
xmlReader.setContentHandler (converter);
359+
xmlReader.parse (new InputSource(new StringReader((String)html)));
360+
return converter.spannable();
361+
} catch (SAXException | IOException e) {
362+
e.printStackTrace();
363+
}
364+
}
365+
return html;
366+
}
367+
public static CharSequence fromHtml(Context context, CharSequence html) {
368+
return fromHtml(html, context,false);
369+
}
341370
}

0 commit comments

Comments
 (0)