Ist es möglich, in jedem Steuerelement der Anwendung eine benutzerdefinierte Schriftart festzulegen? Und nicht unbedingt Laufzeit? (dh wenn möglich aus XML oder nur einmal für die gesamte Anwendung in der JAVA-Datei)
Ich kann die Schriftart für ein Steuerelement aus diesem Code festlegen.
public static void setFont(TextView textView) {
Typeface tf = Typeface.createFromAsset(textView.getContext()
.getAssets(), "fonts/BPreplay.otf");
textView.setTypeface(tf);
}
Das Problem mit diesem Code ist, dass er für jedes Steuerelement aufgerufen werden sollte. Und ich möchte diese oder eine ähnliche Methode einmal aufrufen oder wenn möglich die Eigenschaft in XML setzen. Ist es möglich?
android
fonts
textview
android-fonts
Prasham
quelle
quelle
VIEW
anstatt eincustom text view
und eincustom button view
getrennt zu schreiben ? Meine Anforderung gilt für jedes Steuerelement, und die Textansicht war nur ein Beispiel. Entschuldigung, ich habe vergessen, es zu erwähnen .. :-(Antworten:
EDIT : Es ist also eine Weile her und ich möchte hinzufügen, was meiner Meinung nach der beste Weg ist, dies zu tun, und nicht weniger über XML!
Zunächst möchten Sie eine neue Klasse erstellen, die alle Ansichten überschreibt, die Sie anpassen möchten. (zB möchten Sie einen Button mit einer benutzerdefinierten Schrift? Erweitern
Button
). Machen wir ein Beispiel:Wenn Sie noch keines haben, fügen Sie unter ein XML-Dokument hinzu
res/values/attrs.xml
und fügen Sie Folgendes hinzu:Okay, wenn das aus dem Weg ist, kehren wir zu der
parseAttributes()
Methode von früher zurück:Jetzt sind Sie fertig. Sie können für fast alles weitere Attribute hinzufügen (Sie können ein weiteres für typefaceStyle hinzufügen - fett, kursiv usw.), aber jetzt wollen wir sehen, wie es verwendet wird:
Die
xmlns:custom
Linie kann wirklich alles sein, aber die Konvention ist die oben gezeigte. Was zählt ist, dass es einzigartig ist und deshalb der Paketname verwendet wird. Jetzt verwenden Sie nur dascustom:
Präfix für Ihre Attribute und dasandroid:
Präfix für Android-Attribute.Eine letzte Sache: Wenn Sie dies in einem style (
res/values/styles.xml
) verwenden möchten , sollten Sie die Zeile nicht hinzufügenxmlns:custom
. Verweisen Sie einfach auf den Namen des Attributs ohne Präfix:Verwenden einer benutzerdefinierten Schriftart in Android
Das sollte helfen. Grundsätzlich gibt es keine Möglichkeit, dies in XML zu tun, und soweit ich das beurteilen kann, gibt es keine einfachere Möglichkeit, dies in Code zu tun. Sie können jederzeit eine setLayoutFont () -Methode verwenden, die die Schriftart einmal erstellt und dann für jede setTypeface () ausführt. Sie müssen es nur jedes Mal aktualisieren, wenn Sie einem Layout ein neues Element hinzufügen. So etwas wie unten:
EDIT : Also bin ich gerade dazu gekommen, so etwas selbst zu implementieren, und wie ich dazu kam, hat ich eine Funktion wie diese gemacht:
Verwenden Sie dann einfach diese Methode von onCreate () und übergeben Sie alle TextViews, die Sie aktualisieren möchten:
EDIT 9/5/12:
Da dies immer noch Ansichten und Stimmen erhält, möchte ich eine viel bessere und vollständigere Methode hinzufügen:
Wenn Sie ihm das Stammverzeichnis Ihres Layouts übergeben, wird rekursiv nach
TextView
oderButton
Ansichten (oder anderen, die Sie zu dieser if-Anweisung hinzufügen) in diesem Layout gesucht und die Schriftart festgelegt, ohne dass Sie sie anhand der ID angeben müssen. Dies setzt natürlich voraus, dass Sie die Schriftart für jede Ansicht festlegen möchten .quelle
recycle
dasTypedArray values
?xmlns:custom="http://schemas.android.com/apk/res-auto"
Es gibt eine ziemlich einfache Möglichkeit, dies über XML zu tun. Sie müssen nur ein eigenes Widget erstellen, das TextView erweitert.
Erstellen Sie zunächst eine Datei in res / values / attrs.xml mit folgendem Inhalt:
Erstellen Sie anschließend Ihr benutzerdefiniertes Widget:
Wie Sie sehen können, liest der obige Code eine Schriftart in den Assets / Ordnern. In diesem Beispiel gehe ich davon aus, dass sich im Assets-Ordner eine Datei mit dem Namen "custom.ttf" befindet. Verwenden Sie zuletzt das Widget in den XMLs:
Hinweis: Ihre benutzerdefinierte Schriftart wird im Layout-Editor von Eclipse nicht angezeigt. Deshalb habe ich den
isInEditMode()
Scheck gestellt. Wenn Sie jedoch Ihre App ausführen, funktioniert die benutzerdefinierte Schriftart wie ein Zauber.Ich hoffe es hilft!
quelle
TextView
Klasse erweitert habe. Stellentypeface
Sie das ein und verwenden Sie das benutzerdefinierte Steuerelement im Layout, wie wir es normalerweise tun, und es hat bei mir funktioniert ... Es war jedoch einfach, dass das obige ...Beispiel für TextView mit Roboto-Schrift:
attr.xml
RobotoTextView.java:
Anwendungsbeispiel:
Ressourcen: Roboto & Noto-Schriftarten
quelle
Es ist zu spät, aber es hilft dem anderen, den
ich erstellt habe. CustomTextView hat ein Attribut namens typeFace und es behebt Probleme mit Speicherverlusten beim Laden von Schriftarten ohne Caching
Erstens eine
Fonts
Klasse, die die Schriftarten nur einmal aus Assets lädtDann müssen Sie ein benutzerdefiniertes Attribut in der Datei attrs.xml hinzufügen
dann benutzerdefinierte Klasse
und schließlich die Textansicht hinzufügen
Sie können die Schriftart auch programmgesteuert mit der setTypeFace-Methode ändern.
Sie können auch den benutzerdefinierten Namespace in Ihr übergeordnetes Layout verschieben, wenn Sie in dieser Ansicht mehrere verwenden möchten
Viel Spaß beim Codieren :)
quelle
Die folgende Methode, die in onCreate () aufgerufen und Ihre äußerste ViewGroup übergeben wurde, funktioniert für alles außer Text, der dynamisch erstellt wird (dh dynamische Listen, Warnungen usw.). Eine einfache Möglichkeit, die äußerste ViewGroup zu erhalten, besteht darin, getRootView für eine Ihrer Ansichten zu verwenden.
Dies sollte auch für dynamische Inhalte funktionieren. Sie müssen sie nur aufrufen und alles, was Sie erstellt haben, direkt nach der Erstellung übergeben (ich habe dies jedoch nicht getestet).
Um Speicherplatz zu sparen, möchten Sie die Schrift wahrscheinlich zu einer statischen Variablen machen, anstatt jedes Mal eine neue zu erstellen, wenn die Schleife wie hier ausgeführt wird.
quelle
Wenn Sie nach einer allgemeineren programmatischen Lösung suchen, habe ich eine statische Klasse erstellt, mit der Sie die Schriftart einer gesamten Ansicht festlegen können (Aktivitäts-Benutzeroberfläche). Beachten Sie, dass ich mit Mono (C #) arbeite, Sie es jedoch problemlos mit Java implementieren können.
Sie können dieser Klasse ein Layout oder eine bestimmte Ansicht übergeben, die Sie anpassen möchten. Wenn Sie sehr effizient sein möchten, können Sie es mithilfe des Singleton-Musters implementieren.
In Ihrer Aktivität müssen Sie ein Schriftobjekt erstellen. Ich erstelle meine in OnCreate () mit einer .ttf-Datei in meinem Verzeichnis Resources / Assets /. Stellen Sie sicher, dass die Datei in ihren Eigenschaften als Android-Asset markiert ist.
quelle
Leider bietet Android nicht die schnelle, einfache und saubere Möglichkeit, die Schriftart für Ihre gesamte App zu ändern. Aber kürzlich habe ich mich mit dieser Angelegenheit befasst und einige Tools erstellt, mit denen Sie die Schriftart ohne Codierung ändern können (Sie können dies alles über XML, Stile und sogar Textdarstellungen tun). Sie basieren auf ähnlichen Lösungen wie in den anderen Antworten hier, ermöglichen jedoch weitaus mehr Flexibilität. Sie können alles darüber in diesem Blog lesen und das Github-Projekt hier sehen .
Hier ist ein Beispiel für die Anwendung dieser Tools. Fügen Sie alle Ihre Schriftdateien ein
assets/fonts/
. Deklarieren Sie diese Schriftarten dann in einer XML-Datei (z. B.res/xml/fonts.xml
) und laden Sie diese Datei frühzeitig in Ihre App mitTypefaceManager.initialize(this, R.xml.fonts);
(z. B. im onCreate Ihrer Anwendungsklasse). Die XML-Datei sieht folgendermaßen aus:Jetzt können Sie diese Schriftarten in Ihrem Stil oder in XML verwenden (vorausgesetzt, Sie verwenden die oben genannten Tools), indem Sie das benutzerdefinierte UI-Element
com.innovattic.font.FontTextView
in Ihrem XML-Layout verwenden. Unten sehen Sie, wie Sie eine Schriftart auf alle Texte in Ihrer gesamten App anwenden können, indem Sie einfach Folgendes bearbeitenres/values/styles.xml
:Mit der Begleitung
res/layout/layout.xml
:Vergessen Sie nicht, das Thema in Ihrem Android-Manifest anzuwenden.
quelle
Ich möchte der großartigen Lösung von eine Notiz hinzufügen
leocadiotine
. Es ist perfekt, aber wenn Sie diese benutzerdefinierte Textansicht verwenden, wird die Anwendung oft verlangsamt, da sie bei jeder Erstellung einer Textansicht auf die Assets zugreifen muss. Ich schlage vor, etwas wie dasView Holder pattern
in der zu verwendenAdapters
, ich schrieb ein Beispiel:Auf diese Weise greift die Anwendung nur einmal pro Asset auf die Assets zu und speichert sie für weitere Anforderungen im Speicher.
quelle
Ich weiß nicht, ob es die gesamte App ändert, aber ich habe es geschafft, einige Komponenten zu ändern, die sonst nicht geändert werden könnten:
quelle
Ich habe Schritt für Schritt Informationen unter diesem Link gefunden: https://github.com/jaydipumaretiya/CustomTypeface/
Es gibt viele Möglichkeiten, die Schrift in Android korrekt zu verwenden. Sie müssen Ihre Schriftdatei im Assets-Ordner direkt unter Ihrem Hauptordner ablegen und können sie zur Laufzeit verwenden.
Eine andere einfachste Möglichkeit ist die Verwendung der Standardbibliothek zum Festlegen der Schriftart in Ihrer XML-Datei. Ich habe diese benutzerdefinierte Schriftbibliothek vorgezogen, um die Schrift auf TextView, EditText, Button, CheckBox, RadioButton und AutoCompleteTextView und andere Wedgets in Android zu setzen.
quelle
Android 8.0 (API-Level 26) führt eine neue Funktion ein: Schriftarten in XML. Sie können eine Schriftfamiliendatei erstellen und in styles.xml festlegen.
Quelle: Schriftarten in XML
quelle