2016-05-27 11 views
3

Ich entwickle eine App, die mehrere Sprachen unterstützen muss, darunter einige, für die Schriften in einigen älteren Android-Versionen nicht enthalten sind.Set Fallback Schriftarten Android App

Dasselbe TextView kann Inhalt in mehreren Sprachen haben, so dass die Einstellung eines einzelnen TypeFace nicht hilft, muss ich eine Liste von Fallback-Schriftarten haben, wenn einige Zeichen in bevorzugten Schriftarten nicht verfügbar sind.

Dazu muss ich auch die gleichen Schriftarten für andere Elemente (nicht nur TextViews) verwenden, wenn möglich.

+0

Haben Sie eine Lösung gefunden? –

+0

@SuperThomasLab, siehe die Antwort, die ich gepostet habe. – nisargjhaveri

Antwort

1

Ich hatte einen Workaround dafür. Ich habe die Anwendungsklasse für die App erweitert und die Zeichensätze global festgelegt.

Für die Fallback-Fonts habe ich den Android-API-Code für Typeface gelesen und von dort aus habe ich einige versteckte APIs gefunden. Ich habe alle Arten von Hacking (Reflektionen, private/versteckte Klassen oder Methoden, private Felder einstellen usw.) durchgeführt und es schließlich für Android-API-Versionen 21 bis 23 funktioniert. Ich bin mir nicht sicher über die neueren APIs und es funktioniert nicht für die die älteren.

Sie können meinen Code an https://gist.github.com/nisargjhaveri/47acc83e66dcb347e05685ccfd3038e8

Es funktioniert, überprüfen aber auch empfehle ich es nicht verwenden!

Die bessere Lösung dafür ist die Verwendung von TypefaceSpans, nachdem Sie die beste Schriftart für jedes Zeichen gefunden haben, jedes Mal, wenn Sie dem Benutzer Text zeigen. Ich habe das nicht versucht.

Auch ich habe gerade mit Android für die letzten zwei Monate gespielt, also denke zweimal, bevor du meinen Rat nimmst! : P

+0

Wissen Sie, welche Schriftart für Glyphen verwendet wird, die im aktuellen TypeFace nicht verfügbar sind. Ich habe ein ähnliches Problem, wenn Android immer noch eine Glyphe zeigt, wer weiß, welche Schriftart, auch wenn die Glyphe in der aktuell ausgewählten TypeFace Schriftart fehlt. – rraallvv

+0

Wenn ich mich richtig erinnere, hat Android eine Liste von Fallback-Fonts, die irgendwo in '/ system/etc/fonts.xml' oder ähnlich definiert sind. Es versucht, das Zeichen aus diesen Zeichensätzen zu finden, wenn es nicht in Zeichensätzen mit höherer Priorität gefunden wird. – nisargjhaveri

+0

Ich sehe, danke. Ich habe auch diese im [Quellcode] gefunden (https://android.googlesource.com/platform/frameworks/base/+/master/data/fonts/) – rraallvv