Wie (wenn möglich) kann ich eine benutzerdefinierte Schriftart in einem ActionBar-Titeltext (nur - nicht im Tabulatortext) mit einer Schriftart in meinem Assets-Ordner festlegen? Ich möchte die Option android: logo nicht verwenden.
quelle
Wie (wenn möglich) kann ich eine benutzerdefinierte Schriftart in einem ActionBar-Titeltext (nur - nicht im Tabulatortext) mit einer Schriftart in meinem Assets-Ordner festlegen? Ich möchte die Option android: logo nicht verwenden.
Ich bin damit einverstanden, dass dies nicht vollständig unterstützt wird, aber hier ist, was ich getan habe. Sie können eine benutzerdefinierte Ansicht für Ihre Aktionsleiste verwenden (diese wird zwischen Ihrem Symbol und Ihren Aktionselementen angezeigt). Ich verwende eine benutzerdefinierte Ansicht und habe den nativen Titel deaktiviert. Alle meine Aktivitäten erben von einer einzelnen Aktivität, die diesen Code in onCreate enthält:
this.getActionBar().setDisplayShowCustomEnabled(true);
this.getActionBar().setDisplayShowTitleEnabled(false);
LayoutInflater inflator = LayoutInflater.from(this);
View v = inflator.inflate(R.layout.titleview, null);
//if you need to customize anything else about the text, do it here.
//I'm using a custom TextView with a custom font in my layout xml so all I need to do is set title
((TextView)v.findViewById(R.id.title)).setText(this.getTitle());
//assign the view to the actionbar
this.getActionBar().setCustomView(v);
Und meine Layout-XML (R.layout.titleview im obigen Code) sieht folgendermaßen aus:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent" >
<com.your.package.CustomTextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:textSize="20dp"
android:maxLines="1"
android:ellipsize="end"
android:text="" />
</RelativeLayout>
Sie können dies mit einer benutzerdefinierten
TypefaceSpan
Klasse tun . Es ist demcustomView
oben angegebenen Ansatz überlegen, da es bei Verwendung anderer Aktionsleistenelemente wie dem Erweitern von Aktionsansichten nicht unterbrochen wird.Die Verwendung einer solchen Klasse würde ungefähr so aussehen:
Der benutzerdefinierten
TypefaceSpan
Klasse werden Ihr Aktivitätskontext und der Name einer Schriftart in Ihremassets/fonts
Verzeichnis übergeben. Es lädt die Datei und speichert eine neueTypeface
Instanz im Speicher. Die vollständige Implementierung vonTypefaceSpan
ist überraschend einfach:Kopieren Sie einfach die obige Klasse in Ihr Projekt und implementieren Sie sie
onCreate
wie oben gezeigt in die Methode Ihrer Aktivität .quelle
textAllCaps
Attribut in der zugrunde liegenden Textansicht auf true gesetzt ist (z. B. über ein Thema), wird die benutzerdefinierte Schriftart nicht angezeigt. Dies war ein Problem für mich, als ich diese Technik auf die Registerkartenelemente der Aktionsleiste anwendete.assets/fonts/
. Wenn Sie die .ttf / .otf-Dateien nur unter Assets und nicht in einem Unterordner ablegen, sollten Sie die folgende Codezeile entsprechend ändern :String.format("fonts/%s", typefaceName)
. Ich habe gute 10 Minuten verloren, um es herauszufinden. Wenn Sie dies nicht tun, werden Sie bekommenjava.lang.RuntimeException: Unable to start activity ComponentInfo{com.your.pckage}: java.lang.RuntimeException: native typeface cannot be made
quelle
Aus der Android Support Library v26 + Android Studio 3.0 ist dieser Vorgang im einfach geworden !!
Führen Sie die folgenden Schritte aus, um die Schriftart des Symbolleisten-Titels zu ändern:
res > font
gemäß Schriftarten in XMLIn
res > values > styles
Fügen Sie die folgende ( nutzen Sie Ihre Fantasie hier! )Fügen Sie eine neue Zeile in Ihre Symbolleisteneigenschaften ein,
app:titleTextAppearance="@style/TextAppearance.TabsFont"
wie unten gezeigtViel Spaß beim Stylen von benutzerdefinierten Actionbar-Titeln !!
quelle
In der Kalligraphiebibliothek können Sie über das App-Thema eine benutzerdefinierte Schriftart festlegen, die auch für die Aktionsleiste gilt.
Um die Kalligraphie zu aktivieren, müssen Sie sie lediglich an Ihren Aktivitätskontext anhängen:
Das benutzerdefinierte Standardattribut ist
fontPath
, Sie können jedoch Ihr eigenes benutzerdefiniertes Attribut für den Pfad bereitstellen, indem Sie es in Ihrer Anwendungsklasse mit initialisierenCalligraphyConfig.Builder
. Von der Verwendungandroid:fontFamily
wurde abgeraten.quelle
Es ist ein hässlicher Hack, aber Sie können es so machen (da action_bar_title versteckt ist):
Dieser Code ist für Post-GINGERBREAD-Geräte vorgesehen, kann jedoch problemlos erweitert werden, um auch mit der Aktionsleiste Sherlock zu arbeiten
PS Basierend auf dem @ pjv-Kommentar gibt es eine bessere Möglichkeit, die Titel-ID der Aktionsleiste zu finden
quelle
Der folgende Code funktioniert für alle Versionen. Ich habe dies in einem Gerät mit Lebkuchen sowie auf einem JellyBean-Gerät überprüft
quelle
Verwenden Sie eine neue Symbolleiste in der Support-Bibliothek. Entwerfen Sie Ihre Aktionsleiste als Ihre eigene oder verwenden Sie den folgenden Code
Das Aufblasen von Textview ist keine gute Option. Versuchen Sie es mit dem Spannable String Builder
Kopie unter Klasse
quelle
quelle
typeface.ITALIC
mitTypeface.ITALIC
keine statische Mitglied Warnung habenWenn Sie die Schriftart auf alle Textansichten in der gesamten Aktivität festlegen möchten, können Sie Folgendes verwenden:
Und der TypefaceCache:
quelle
Ich habe gerade Folgendes in der Funktion onCreate () getan:
Ich verwende die Support-Bibliotheken. Wenn Sie sie nicht verwenden, sollten Sie zu getActionBar () anstelle von getSupportActionBar () wechseln.
In Android Studio 3 können Sie benutzerdefinierte Schriftarten gemäß den Anweisungen https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html hinzufügen und dann Ihre neu hinzugefügte Schriftart in " font_to_be_used "
quelle
Um die Antwort von @ Sam_D zu ergänzen, musste ich Folgendes tun, damit es funktioniert:
Es scheint ein Overkill zu sein - zweimal auf v.findViewById (R.id.title)) zu verweisen - aber nur so kann ich es tun.
quelle
Um die richtige Antwort zu aktualisieren.
Erstens: Setzen Sie den Titel auf false, da wir die benutzerdefinierte Ansicht verwenden
Zweitens: Erstellen Sie titleview.xml
Zuletzt :
FONT-DATEI HERUNTERLADEN: Da ich die Datei in Cloudinary speichere, habe ich einen Link zum Herunterladen.
quelle
Es ist keine benutzerdefinierte Textansicht erforderlich!
Deaktivieren Sie zunächst den Titel in der Toobar in Ihrem Java-Code: getSupportActionBar (). SetDisplayShowTitleEnabled (false);
Fügen Sie dann einfach eine Textansicht in die Symbolleiste ein:
quelle
Versuchen Sie es mit This
quelle
Wir müssen Reflexionen verwenden, um dies zu erreichen
quelle
VERSUCHE DIES
quelle