Ich mache das:
toolbar = (Toolbar) findViewById(com.sports.unity.R.id.tool_bar);
setSupportActionBar(toolbar);
setTitle("hello");
Ich möchte hier im Titel “Hallo” eine benutzerdefinierte Schriftart für den Text festlegen. Wie geht das?
anupam x
Ich mache das:
toolbar = (Toolbar) findViewById(com.sports.unity.R.id.tool_bar);
setSupportActionBar(toolbar);
setTitle("hello");
Ich möchte hier im Titel “Hallo” eine benutzerdefinierte Schriftart für den Text festlegen. Wie geht das?
Seit android.support.v7.appcompat 24.2
Toolbar
hat Methode setTitleTextAppearance
und Sie können seine Schriftart ohne externe festlegen textview
.
Erstellen Sie einen neuen Stil in styles.xml
<style name="RobotoBoldTextAppearance">
<item name="android:fontFamily">@font/roboto_condensed_bold</item>
</style>
und benutze es
mToolbar.setTitleTextAppearance(this, R.style.RobotoBoldTextAppearance);
Die beste Antwort
– Gutes Leben
13. November 2017 um 8:12 Uhr
Um die richtige Antwort zu vervollständigen, würde ich den Link zum Erstellen von Schriftart-XML hinzufügen: developer.android.com/guide/topics/ui/look-and-feel/…
– Fabrizio Caldarelli
26. März 2018 um 8:52 Uhr
Es löste mein Problem mit nur einer einzigen Änderungszeile. Danke, Mann
– Nirav Bhandari
5. November 2018 um 10:18 Uhr
Fügen Sie dem Stil möglicherweise ein übergeordnetes Element wie folgt hinzu: parent="TextAppearance.Widget.AppCompat.Toolbar.Title"
. Denn die Größe des Titels ist für mich sonst sehr klein.
– Kevin van Mierlo
23. November 2018 um 10:00 Uhr
Es hat für mich funktioniert. Aber ich habe in der XML-Datei wie implementiert app:titleTextAppearance="@style/ToolbarTextAppearance"
– Jimmy Alejandro
5. April um 15:01 Uhr
gmetax
Update 2018 (Kotlin-Version)
fun Toolbar.changeToolbarFont(){
for (i in 0 until childCount) {
val view = getChildAt(i)
if (view is TextView && view.text == title) {
view.typeface = Typeface.createFromAsset(view.context.assets, "fonts/customFont")
break
}
}
}
und benutze es so toolBar.changeToolbarFont()
alter Beitrag
Um einen benutzerdefinierten Titel in Ihrer Toolbar zu verwenden, müssen Sie sich nur daran erinnern, dass die Toolbar nur eine schicke 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 die TextView beliebig gestalten können, da es sich nur um eine normale TextView handelt. In Ihrer Aktivität können Sie also folgendermaßen auf den Titel zugreifen:
Toolbar toolbarTop = (Toolbar) findViewById(R.id.toolbar_top);
TextView mTitle = (TextView) toolbarTop.findViewById(R.id.toolbar_title);
Und dann:
Typeface khandBold = Typeface.createFromAsset(BalrogApplication.getApplication().getAssets(), "fonts/Khand-bold.ttf");
mTitle.setTypeface(khandBold);
AKTUALISIEREN
dynamisch Version
public static void changeToolbarFont(Toolbar toolbar, Activity context) {
for (int i = 0; i < toolbar.getChildCount(); i++) {
View view = toolbar.getChildAt(i);
if (view instanceof TextView) {
TextView tv = (TextView) view;
if (tv.getText().equals(toolbar.getTitle())) {
applyFont(tv, context);
break;
}
}
}
}
public static void applyFont(TextView tv, Activity context) {
tv.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/customFont"));
}
und benutze es so
changeToolbarFont(findViewById(R.id.app_bar), this);
Ja, meine Aktivität zeigt auch den Klassennamen zusammen mit der Textansicht. So entfernen Sie den Klassennamen daraus.
– anupam x
7. September 2015 um 6:48 Uhr
@anupamx Sie können die Aktionsleiste wie folgt entfernen: getSupportActionBar().setTitle(null); Tun Sie es direkt, nachdem Sie die Symbolleiste als Aktionsleiste festgelegt haben: setSupportActionBar(Symbolleiste);
– Bandreid
12. Februar 2016 um 9:56 Uhr
@gmetax Wenn ich in XML eine benutzerdefinierte TextView in die Symbolleiste einfüge, kann ich den Standardtitel der Symbolleiste nicht verwenden, oder? Ich meine meinen Anruf toolbar.setTitle()
wird vergebens sein, habe ich recht?
– Mehmet
19. Februar 2017 um 16:24 Uhr
@Mehmed ja, aber Sie können diese Methode überschreiben, um so zu arbeiten, wie Sie möchten
– gmetax
3. November 2017 um 11:21 Uhr
Der dynamische ist der einzige, der für mich funktioniert hat.
– Lernen Sie OpenGL ES
26. Juli 2019 um 14:49 Uhr
ein Fathmann
Ich wollte immer noch die Toolbars-Titelmethoden verwenden (ich wollte auch keine benutzerdefinierte Toolbar-Klasse haben), also hat das Hinzufügen der benutzerdefinierten TextView innerhalb des Toolbar-XML-Elements bei mir nicht funktioniert. Stattdessen habe ich die folgende Methode verwendet, um die TextView zu finden:
public static void applyFontForToolbarTitle(Activity context){
Toolbar toolbar = (Toolbar) context.findViewById(R.id.app_bar);
for(int i = 0; i < toolbar.getChildCount(); i++){
View view = toolbar.getChildAt(i);
if(view instanceof TextView){
TextView tv = (TextView) view;
Typeface titleFont = Typeface.
createFromAsset(context.getAssets(), "fonts/customFont");
if(tv.getText().equals(toolbar.getTitle())){
tv.setTypeface(titleFont);
break;
}
}
}
}
Es ist toolbar.getTitle() anstelle von context.getTitle(). Vielen Dank! Es hat für mich funktioniert.
– Crubio
15. März 2016 um 14:47 Uhr
Dies hat mir geholfen, eine benutzerdefinierte Schriftart festzulegen, wenn ich keinen Zugriff auf die Layoutdateien hatte und keine hinzufügen konnte TextView
zum Toolbar
.
– Ícaro
19. Januar 2017 um 19:33 Uhr
Wenn Sie die Titelzeichenfolge der Symbolleiste im Code festlegen, stellen Sie sicher, dass Sie die obige Methode aufrufen, nachdem Sie den Titel der Symbolleiste festgelegt haben. Vor dem Einstellen des Titels hat dies keine Wirkung.
– abbedfar
6. März 2017 um 15:36 Uhr
Der einzige Vorschlag, den ich machen kann, ist, einen Erfolgswert zurückzugeben, wenn Sie die Schriftart festgelegt haben.
– gmetax
10. August 2017 um 10:30 Uhr
ahaist
Ich habe einen Artikel geschrieben, in dem die vollständige Lösung beschrieben wird. Hier sind die Grundlagen:
styles.xml
:<style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Light">
<item name="android:fontFamily">@font/fancy-font</item>
</style>
Toolbar
s-Layout:<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:theme="@style/ToolbarTheme"/>
.ttf
Datei gespeichert in res/font
:
Sirvan Alien
Sie können erstellen Schriftarten Ordner unter res-Verzeichnis in der letzten Version von Android Studio 3. Danach müssen Sie einen benutzerdefinierten Stil definieren Stileund danach müssen Sie verwendet werden TitelTextAussehen in der Symbolleiste zum Stil, den Sie definiert haben.
Schritte Wie unten.
1. Schriftartenverzeichnis erstellen: res > Android-Ressourcenverzeichnis > Ressourcentyp : Schriftartenund klicken Sie auf OK Schriftartenverzeichnis erstellen (Android Studio 3).
Offen styles.xml und erstellen Sie einen benutzerdefinierten Stil wie unten
<style name="**TextAppearance.TabsFont**" parent="**android:TextAppearance**">
<item name="android:fontFamily">font/rmedium</item>
<item name="android:textSize">18sp</item>
</style>
3.Jetzt Layout öffnen und hinzufügen app:titleTextAppearance=”@style/TextAppearance.TabsFont” zum Toolbar-Tag, wie unten.
<android.support.v7.widget.Toolbar
android:id="@+id/toolbarMain"
app:title="@string/time_amp_date"
app:titleTextAppearance="@style/TextAppearance.TabsFont"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:theme="@style/AppTheme"
app:elevation="2dp" />
Das ist ERLEDIGT. Wenn Sie die App jetzt ausführen, können Sie die Schriftart in Ihrer Symbolleiste sehen.
arush
Platzierung von Schriftarten:
Gehen Sie zur Java-Datei der Aktivität, deren Schriftart Sie anpassen müssen. Ich habe mainActivity hier angepasst.
for(int i = 0; i < toolbar.getChildCount(); i++)
{ View view = toolbar.getChildAt(i);
if(view instanceof TextView) {
TextView textView = (TextView) view;
Typeface myCustomFont=Typeface.createFromAsset(getAssets(),"font/Balker.ttf");
textView.setTypeface(myCustomFont); }
}
Sie können diese einfache Methode verwenden, um eine benutzerdefinierte Schriftart für den Titel der Symbolleiste festzulegen.
Toolbar toolbar = (Toolbar) findViewById(com.sports.unity.R.id.tool_bar);
TextView tv = getToolBarTextView();
tv.settext("Hello");
private TextView getToolBarTextView() {
TextView titleTextView = null;
try {
Field f = mToolBar.getClass().getDeclaredField("mTitleTextView");
f.setAccessible(true);
titleTextView = (TextView) f.get(mToolBar);
Typeface font = Typeface.createFromAsset(getApplicationContext().getAssets(),"fonts/mfont.ttf");
titleTextView.setTypeface(font);
} catch (NoSuchFieldException e) {
} catch (IllegalAccessException e) {
}
return titleTextView;
}
Reflexion ist bestenfalls skizzenhaft. Es schlägt bei mir fehl, wenn minify aktiviert ist.
– ein Fathmann
11. Februar 2016 um 20:47 Uhr