Um einen benutzerdefinierten Titel in Ihrem zu verwenden Toolbar
, müssen Sie sich nur daran erinnern, dass dies Toolbar
nur eine ausgefallene ViewGroup ist, sodass Sie einen benutzerdefinierten Titel wie folgt hinzufügen können:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_top"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="@color/action_bar_bkgnd"
app:theme="@style/ToolBarTheme" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Toolbar Title"
android:layout_gravity="center"
android:id="@+id/toolbar_title" />
</android.support.v7.widget.Toolbar>
Dies bedeutet, dass Sie das stylen können, TextView
wie Sie möchten, da es nur ein reguläres ist TextView
. In Ihrer Aktivität können Sie also wie folgt auf den Titel zugreifen:
Toolbar toolbarTop = (Toolbar) findViewById(R.id.toolbar_top);
TextView mTitle = (TextView) toolbarTop.findViewById(R.id.toolbar_title);
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
( siehe diese Antwort ).Der ToolBar-Titel ist stilisierbar. Alle Anpassungen, die Sie vornehmen, müssen im Thema vorgenommen werden. Ich gebe Ihnen ein Beispiel.
Symbolleistenlayout:
Stile:
quelle
TextView
ist etwas hackig, aber die Antwort auf die Reflexion ist einfach nur böse.Dies ist nur, um alle Teile mit der Antwort von @ MrEngineer13 mit @ Jonik- und @ Rick Sanchez-Kommentaren in der richtigen Reihenfolge zu verbinden, damit der Titel leicht zentriert wird !!
Das Layout mit
TextAppearance.AppCompat.Widget.ActionBar.Title
:Der Weg mit der richtigen Reihenfolge zu erreichen:
Bitte vergessen Sie nicht, @ MrEngineer13 zu bewerten !!!
Hier ist ein Beispielprojekt ToolbarCenterTitleSample
Hoffe jemand anderem zu helfen;)
quelle
Scrolling Activity
?Wir haben keinen direkten Zugriff auf den ToolBar-Titel TextView, daher verwenden wir Reflection, um darauf zuzugreifen.
quelle
mTitleTextView
werdenabcde12345
?Hier ist ein Titeltext-abhängiger Ansatz, um eine
TextView
Instanz zu findenToolbar
.quelle
Definieren Sie die folgende Klasse:
... und dann benutze es einfach statt normal
Toolbar
wie folgt:Sie benötigen noch diese 2 Codezeilen in Ihrem
Activity
(wie beim StandardToolbar
):Das ist es! Sie müssen den linksbündigen Standardtitel nicht ausblenden, nicht immer wieder denselben XML-Code duplizieren usw. Verwenden
CenteredToolbar
Sie ihn einfach so, als wäre er StandardToolbar
. Sie können Ihre benutzerdefinierte Schriftart auch programmgesteuert festlegen, da Sie jetzt direkten Zugriff auf die habenTextView
. Hoffe das hilft.quelle
centeredTitleTextView.setTextColor(...)
sollte funktionierenLayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)
?Niemand hat dies erwähnt, aber es gibt einige Attribute für
Toolbar
:app:titleTextColor
zum Einstellen der Titeltextfarbeapp:titleTextAppearance
zum Einstellen der Titeltextdarstellungapp:titleMargin
zum Einstellen des RandesUnd es gibt andere spezifische Seitenränder wie
marginStart
usw.quelle
<style name="customFontTextAppearanceStyle"> <item name="android:textSize">18sp</item> <item name="android:typeface">monospace</item>
und wenden Sie ihn in der Symbolleiste anapp:titleTextAppearance="@styles/customFontTextAppearanceStyle"
app:titleTextAppearanc="style name"
auf demandroid.support.v7.widget.Toolbar
TAGIch benutze diese Lösung:
quelle
Ohne die Symbolleiste TextView können wir die Schriftart mithilfe des folgenden Codes anpassen
quelle
quelle
Layout:
Code:
quelle
Ich habe diese Lösung gelöst, und dies ist ein folgender Code:
Und Sie können Titel / Bezeichnung ändern. Schreiben Sie in Aktivität einen der folgenden Codes:
TextView mTitle = (TextView) toolbarTop.findViewById (R.id.toolbar_title); mTitle.setText ("@ string / ....");
quelle
Sie können wie folgt verwenden
quelle
Eine sehr schnelle und einfache Möglichkeit, eine benutzerdefinierte Schriftart festzulegen, ist die Verwendung einer benutzerdefinierten Schriftart
titleTextAppearance
mitfontFamily
:Zu styles.xml hinzufügen :
Erstellen Sie in Ihrem res- Ordner eine Schriftart (Beispiel: varela_round_regular.ttf )
Weitere Informationen finden Sie im offiziellen Handbuch unter https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html
quelle
Ich weiß nicht, ob sich in der Appcompat-Bibliothek etwas geändert hat, aber es ist ziemlich trivial, es ist kein Nachdenken erforderlich.
quelle
Lösung, die ich für dieses Problem verwendet habe:
Für den Schwerpunkt denke ich, dass es notwendig wäre, die Layoutparameter horizontal in match_parent zu ändern und dann:
quelle
Update von der Antwort von @ MrEngineer13: Um das Titelzentrum in jedem Fall auszurichten, einschließlich des Hamburger-Symbols und der Optionsmenüs, können Sie eine
FrameLayout
Symbolleiste wie die folgende hinzufügen :quelle
Versuchen Sie in XML Folgendes:
In Code:
quelle
Obwohl das Hinzufügen einer Textansicht zur Symbolleiste das Problem der Einschränkung des Titelstils lösen kann, gibt es ein Problem damit. Da wir es keinem Layout hinzufügen, haben wir nicht zu viel Kontrolle über seine Breite. Wir können entweder wrap_content oder match_parent verwenden.
Stellen Sie sich nun ein Szenario vor, in dem eine Suchansicht als Schaltfläche am rechten Rand der Symbolleiste angezeigt wird. Wenn der Titelinhalt mehr ist, wird er über der Schaltfläche angezeigt, wodurch er verdeckt wird. Es gibt keine Möglichkeit, diesen Kurzschluss beim Festlegen einer Breite für das Etikett zu steuern, und Sie möchten dies nicht tun, wenn Sie ein ansprechendes Design wünschen.
Hier ist eine Lösung, die für mich funktioniert hat und sich geringfügig vom Hinzufügen einer Textansicht zur Symbolleiste unterscheidet. Fügen Sie stattdessen die Symbolleiste und die Textansicht zu einem relativen Layout hinzu und stellen Sie sicher, dass sich die Textansicht oben auf der Symbolleiste befindet. Dann können wir geeignete Ränder verwenden und sicherstellen, dass die Textansicht dort angezeigt wird, wo sie angezeigt werden soll.
Stellen Sie sicher, dass Sie die Symbolleiste so einstellen, dass der Titel nicht angezeigt wird.
Hier ist das XML für diese Lösung:
Behebt das oben erwähnte Problem @ ankur-chaudhary.
quelle
Da
android.support.v7.appcompat 24.2
Toolbar
hat MethodesetTitleTextAppearance
und Sie können seine Schriftart ohne externe einstellentextview
.Erstellen Sie einen neuen Stil in styles.xml
und benutze es
quelle
Ich habe mehrere Tage nach einer universellen Lösung gesucht. Meine Symbolleiste arbeitet mit Android-Menü und Navigationssymbol.
Zunächst müssen Sie eine benutzerdefinierte Symbolleistenklasse erstellen. Diese Klasse muss titelzentrierte Positionen (Auffüllungen) berechnen:
Zweitens müssen Sie eine Layout-Symbolleiste erstellen:
Das ist alles
quelle
Versuchen Sie, Symbolleiste und Tittle in einer separaten Ansicht zu verwenden. Sehen Sie sich das rechte Ende an und geben Sie ihnen ein Gewicht, das dem Gewicht der Symbolleiste entspricht. Auf diese Weise kommt Ihr Tittle in die Mitte.
quelle
Sie können diesen Code in Ihre XML-Datei einfügen
quelle
quelle
Die Einstellung
android:gravity="center"
hat bei mir funktioniertKein Styling nichts. Die Symbolleiste ist im Grunde
ViewGroup
alles, was Sie tun müssen, ist die Schwerkraft der darin enthaltenen Elemente einzustellen.quelle
androidx.appcompat.widget.Toolbar
Für benutzerdefinierte Schriftarten in der Symbolleiste können Sie die TextView-Schriftart im Stil überschreiben und dann jede TextView in Ihrer App auch die Titelschrift der Symbolleiste automatisch ändern. Ich habe sie in Android Studio 3.1.3 getestet
mit Stil mach es:
und dann in Ihrem Thema Folgendes verwenden:
quelle
Ich habe eine andere Möglichkeit gefunden, eine benutzerdefinierte Symbolleiste ohne zusätzlichen Java / Kotlin-Code hinzuzufügen.
Erstens: Erstellen Sie ein XML mit Ihrem benutzerdefinierten Symbolleistenlayout mit AppBarLayout als übergeordnetem Element:
Zweitens: Fügen Sie die Symbolleiste in Ihr Layout ein:
quelle
Aus meiner Sicht haben Sie zwei Möglichkeiten:
1) Bearbeiten Sie die XML-Symbolleiste. Wenn Ihre Symbolleiste in XML hinzugefügt wird, sieht es normalerweise so aus:
Wenn Sie es anpassen möchten, entfernen Sie einfach das '/' am Ende und machen Sie es so:
Auf diese Weise können Sie eine Symbolleiste erstellen und die Textansicht und das Logo anpassen.
2) Ändern Sie programmgesteuert die native Textansicht und das Symbol:
Stellen Sie sicher, dass Ihre Symbolleiste nicht null ist, bevor Sie etwas darin festlegen.
quelle
Sie können eine benutzerdefinierte
TextView
in der Symbolleiste wie folgt haben:Dadurch wird der Text zentriert. Wenn Sie benutzerdefinierte Schriftart zu einem normalen hinzufügen möchten
Toolbar
, stellen Sie ein<style>
:Und fügen Sie es der Symbolleiste hinzu:
Für die Textansicht in der Symbolleiste können Sie sie mit dem
fontFamily
Attribut definieren:quelle
Ich hatte das gleiche Problem, das dadurch in MainActivity behoben wurde
Und in Fragment
quelle