So legen Sie eine benutzerdefinierte Schriftart für den Titel in der Symbolleiste von Android fest

Lesezeit: 7 Minuten

Benutzer-Avatar
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


Benutzer-Avatar
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

Benutzer-Avatar
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

Benutzer-Avatar
ahaist

Sie können dies nur mit Themen tun:

Ich habe einen Artikel geschrieben, in dem die vollständige Lösung beschrieben wird. Hier sind die Grundlagen:

1) Definieren Sie ein Thema in styles.xml:

<style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Light">
    <item name="android:fontFamily">@font/fancy-font</item>
</style>

2) Legen Sie dieses Thema in Ihrem fest Toolbars-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"/>

Dies setzt voraus, dass Sie eine haben .ttf Datei gespeichert in res/font:

Ressourcenverzeichnis mit Schriftart

Benutzer-Avatar
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).

  1. 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.

Benutzer-Avatar
arush

  1. Platzierung von Schriftarten:

    • Laden Sie zunächst eine .ttf-Datei herunter. Meine Datei ist Balker.ttf
    • Stellen Sie sicher, dass Sie einen “Assets”-Ordner haben. Wenn es keine gibt, klicken Sie mit der rechten Maustaste über die App und gehen Sie zu Neu> Ordner> Assets-Ordner
    • Erstellen Sie im Ordner „Assets“ einen neuen Ordner und nennen Sie ihn „Schriftart“.
    • Legen Sie Ihre Datei, wie ich es mit Balker.ttf getan habe, in den Ordner „font“ ab.
  2. 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

1152560cookie-checkSo legen Sie eine benutzerdefinierte Schriftart für den Titel in der Symbolleiste von Android fest

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy