Ich versuche, ein GUI-Layout mithilfe von XML-Dateien in Android zu definieren. Soweit ich herausfinden kann, kann nicht angegeben werden, dass Ihre Widgets eine benutzerdefinierte Schriftart (z. B. eine, die Sie in Assets / font / platziert haben) in XML-Dateien verwenden sollen, und Sie können nur die vom System installierten Schriftarten verwenden.
Ich weiß, dass ich im Java-Code die Schriftart jedes Widgets manuell mithilfe eindeutiger IDs ändern kann. Alternativ könnte ich alle Widgets in Java durchlaufen, um diese Änderung vorzunehmen, aber dies wäre wahrscheinlich sehr langsam.
Welche anderen Optionen habe ich? Gibt es bessere Möglichkeiten, Widgets mit einem benutzerdefinierten Erscheinungsbild zu erstellen? Ich möchte nicht besonders die Schriftart für jedes neue Widget, das ich hinzufüge, manuell ändern müssen.
Antworten:
Sie können TextView erweitern, um benutzerdefinierte Schriftarten festzulegen, wie ich hier erfahren habe .
TextViewPlus.java:
attrs.xml: (in res / values)
main.xml:
Sie würden "saxmono.ttf" in den Assets- Ordner legen .
UPDATE 8/1/13
Bei dieser Methode gibt es ernsthafte Speicherprobleme. Siehe den Kommentar von chedabob unten.
quelle
xmlns:foo="http://schemas.android.com/apk/res/com.example
Ich bin 3 Jahre zu spät für die Party :( Dies könnte jedoch für jemanden nützlich sein, der über diesen Beitrag stolpern könnte.
Ich habe eine Bibliothek geschrieben, die Schriften zwischenspeichert und es Ihnen ermöglicht, benutzerdefinierte Schriften direkt aus XML anzugeben. Die Bibliothek finden Sie hier .
So würde Ihr XML-Layout aussehen, wenn Sie es verwenden.
quelle
compile 'com.mobsandgeeks:android-typeface-textview:1.0'
aber das hat nicht funktioniert.xmlns:geekui="http://schemas.android.com/apk/res-auto"
Dies kann etwas spät sein, aber Sie müssen eine Singleton-Klasse erstellen, die die benutzerdefinierte Schriftart zurückgibt, um Speicherverluste zu vermeiden.
TypeFace-Klasse:
Benutzerdefinierte Textansicht:
Per XML:
Programmatisch:
quelle
Alte Frage, aber ich wünschte, ich würde diese Antwort hier lesen, bevor ich mich auf die Suche nach einer guten Lösung mache. Calligraphy erweitert das
android:fontFamily
Attribut, um Unterstützung für benutzerdefinierte Schriftarten in Ihrem Asset-Ordner hinzuzufügen, wie folgt:Das einzige, was Sie tun müssen, um es zu aktivieren, ist es an den Kontext der Aktivität anzuhängen, die Sie verwenden:
Sie können auch Ihr eigenes benutzerdefiniertes Attribut angeben, das ersetzt werden soll
android:fontFamily
Es funktioniert auch in Themen, einschließlich AppTheme.
quelle
Verwenden von DataBinding :
In XML:
Schriftartdatei muss in sein
assets/fonts/
quelle
Wenn Sie nur eine Schriftart haben, die Sie hinzufügen möchten, und weniger Code schreiben möchten, können Sie eine dedizierte Textansicht für Ihre spezifische Schriftart erstellen. Siehe Code unten.
In main.xml können Sie Ihre Textansicht jetzt folgendermaßen hinzufügen:
quelle
Der beste Weg, dies zu tun Ab Android O Preview Release ist dieser Weg
1.) Klicken Sie mit der rechten Maustaste auf den Ordner res und gehen Sie zu Neu> Android-Ressourcenverzeichnis . Das
Fenster Neues Ressourcenverzeichnis wird angezeigt.
2.) Wählen Sie in der Liste Ressourcentyp die Schriftart aus und klicken Sie auf OK.
3.) Fügen Sie Ihre Schriftdateien in den Schriftordner ein. Die folgende Ordnerstruktur generiert R.font.dancing_script, R.font.la_la und R.font.ba_ba.
4.) Doppelklicken Sie auf eine Schriftartdatei, um eine Vorschau der Schriftarten der Datei im Editor anzuzeigen.
Als nächstes müssen wir eine Schriftfamilie erstellen
1.) Klicken Sie mit der rechten Maustaste auf den Schriftartenordner und gehen Sie zu Neu> Schriftressourcendatei . Das Fenster Neue Ressourcendatei wird angezeigt.
2.) Geben Sie den Dateinamen ein und klicken Sie auf OK . Die neue XML-Schriftartressource wird im Editor geöffnet.
3.) Fügen Sie jede Schriftartdatei, jeden Schriftstil und jedes Gewichtsattribut in das Schriftart-Tag-Element ein. Das folgende XML veranschaulicht das Hinzufügen von font-bezogenen Attributen zum XML der Schriftartressource:
Hinzufügen von Schriftarten zu einer Textansicht:
Wie aus der Dokumentation
Alle Schritte sind korrekt.
quelle
Erweitern Sie es
TextView
und geben Sie ihm ein benutzerdefiniertes Attribut, oder verwenden Sie einfach das android: tag-Attribut, um eine Zeichenfolge mit der gewünschten Schriftart zu übergeben. Sie müssen eine Konvention auswählen und sich daran halten, da ich alle meine Schriftarten im Ordner res / assets / fonts / ablege, damit Ihre TextView-Klasse weiß, wo sie zu finden sind. Dann legen Sie in Ihrem Konstruktor die Schriftart nach dem Superaufruf einfach manuell fest.quelle
Die einzige Möglichkeit, benutzerdefinierte Schriftarten zu verwenden, ist der Quellcode.
Denken Sie daran, dass Android auf Geräten mit sehr begrenzten Ressourcen ausgeführt wird und Schriftarten möglicherweise viel RAM benötigen. Die eingebauten Droid-Schriftarten sind speziell angefertigt und, wenn Sie bemerken, fehlen viele Zeichen und Dekorationen.
quelle
Ich könnte eine einfache Antwort auf die Frage haben, ohne die Textansicht zu erweitern und einen langen Code zu implementieren.
Code:
Legen Sie die benutzerdefinierte Schriftartdatei wie gewohnt im Assets-Ordner ab und versuchen Sie dies. Für mich geht das. Ich verstehe nur nicht, warum Peter einen so großen Code für diese einfache Sache gegeben hat oder er seine Antwort in der alten Version gegeben hat.
quelle
Kann auch in der XML definiert werden, ohne benutzerdefinierte Klassen zu erstellen
style.xml
activity_main.xml
Ein kurzer Hinweis, da ich einfach immer vergessen habe, wo die Schriftarten abgelegt werden sollen, muss sich die Schriftart darin befinden
assets
und dieser Ordner befindet sich auf derselben Ebene wieres
undsrc
in meinem Fall auf seinerassets/fonts/ionicons.ttf
Aktualisiert Root-Layout hinzugefügt, da diese Methode
xmlns:app="http://schemas.android.com/apk/res-auto"
funktionieren mussUpdate 2 Ich habe eine Bibliothek vergessen, die ich zuvor installiert habe und die Kalligraphie heißt
quelle
xmlns:app="http://schemas.android.com/apk/res-auto"
zu Ihrem Root-Layout hinzuzufügen , überprüfen Sie auch die aktualisierte AntwortPeters Antwort ist die beste, aber sie kann verbessert werden, indem Sie die Datei styles.xml von Android verwenden, um Ihre Schriftarten für alle Textansichten in Ihrer App anzupassen.
Mein Code ist hier
quelle
Es gibt zwei Möglichkeiten, Schriftarten anzupassen:
!!! meine benutzerdefinierte Schriftart in assets / fonts / iran_sans.ttf
Weg 1: Refrection Typeface.class ||| bester Weg
Rufen Sie FontsOverride.setDefaultFont () in der Klasse Extend Application auf. Dieser Code bewirkt, dass alle Software-Schriftarten geändert werden, auch Toasts-Schriftarten
AppController.java
FontsOverride.java
Weg 2: Verwenden Sie setTypeface
Für eine spezielle Ansicht rufen Sie einfach setTypeface () auf, um die Schriftart zu ändern.
CTextView.java
FontUtils.java
quelle
In diesem Tutorial erfahren Sie, wie Sie eine benutzerdefinierte Schriftart wie @peter einrichten: http://responsiveandroid.com/2012/03/15/custom-fonts-in-android-widgets.html
Es werden auch mögliche Speicherverluste berücksichtigt, unter anderem http://code.google.com/p/android/issues/detail?id=9904 . Im Tutorial finden Sie auch ein Beispiel für das Festlegen einer benutzerdefinierten Schriftart auf einer Schaltfläche.
quelle
Sie können einfach eine benutzerdefinierte Textansichtsklasse erstellen: -
Also, was Sie zuerst tun müssen, machen Sie
Custom textview
Klasse, die mit erweitertAppCompatTextView
.Jetzt erhalten Sie jedes Mal, wenn eine benutzerdefinierte Textansicht aufgerufen wird, einen int-Wert vom Attribut
int fontValue = attrs.getAttributeIntValue("http://schemas.android.com/apk/res-auto","Lato-Regular.ttf",-1)
.Oder
Wir können getTypeface () auch aus der Ansicht abrufen, die wir in unserer xml (
android:textStyle="bold|normal|italic"
) festgelegt haben. Also mach was immer du willst.Jetzt setzen wir eine
FontUtils
beliebige .ttf-Schriftart in unsere Ansicht.quelle
Es kann hilfreich sein zu wissen, dass Sie ab Android 8.0 (API-Level 26) eine benutzerdefinierte Schriftart in XML verwenden können .
Sie können eine benutzerdefinierte Schriftart auf die folgende Anwendung anwenden.
Legen Sie die Schriftart in den Ordner
res/font
.Bei
res/values/styles.xml
Verwendung in der Anwendung Thema.<style name="AppTheme" parent="{whatever you like}"> <item name="android:fontFamily">@font/myfont</item> </style>
quelle
Fontinator ist eine Android-Bibliothek, die es einfach macht, benutzerdefinierte Schriftarten zu verwenden. https://github.com/svendvd/Fontinator
quelle
Sie können TextView nicht erweitern, um ein Widget zu erstellen oder eines in einem Widgets-Layout zu verwenden: http://developer.android.com/guide/topics/appwidgets/index.html
quelle