422 Stimmen

Android-Symbolleiste Titel und benutzerdefinierter Schriftart zentrieren

Ich versuche herauszufinden, wie man eine benutzerdefinierte Schriftart für den Symbolleistentitel verwendet und diesen in der Symbolleiste zentriert (Kundenanforderung).

Im Moment verwende ich die gute alte ActionBar und setze den Titel auf einen leeren Wert. Dann verwende ich setCustomView, um meine benutzerdefinierte Schriftart in einem TextView zu platzieren und sie mit ActionBar.LayoutParams zu zentrieren.

Gibt es einen besseren Weg, das zu tun? Verwendung der neuen Toolbar als meine ActionBar.

5voto

Monet_z_Polski Punkte 296

Lösung, die ich für dieses Problem verwendet habe:

 public static void applyFontForToolbarTitle(Activity a){
        Toolbar toolbar = (Toolbar) a.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;
                if(tv.getText().equals(a.getTitle())){
                    tv.setTypeface(getRuneTypefaceBold(a));
                    break;
                }
            }
        }
    }

Für die zentrale Ausrichtung denke ich, dass es notwendig wäre, die Layout-Parameter horizontal auf match_parent zu ändern und dann:

tv.setGravity(Gravity.CENTER);

5voto

AskNilesh Punkte 63763

Jetzt können wir den Titel mit Material Design 3 in der Mitte ausrichten, ohne zusätzliche Arbeit zu leisten oder einen Textview in der Symbolleiste hinzuzufügen

Füge die untenstehenden Abhängigkeiten in der Datei build.gradle hinzu

implementation 'com.google.android.material:material:1.6.1'

Um den Titel in der Mitte auszurichten, müssen wir das untenstehende richtig verwenden

 app:titleCentered="true"

Um Untertitel in der Mitte auszurichten, müssen wir die untenstehende Eigenschaft verwenden

app:subtitleCentered="true"

Beispielcode

AUSGABE

Bildbeschreibung hier eingeben

4voto

Hai Rom Punkte 1661

Ich habe diese Lösung gelöst und das sind folgende Codes:

Und du kannst den Titel/Label ändern, im Activity, schreibe die folgenden Codes:

Toolbar toolbarTop = (Toolbar) findViewById(R.id.toolbar_top);

TextView mTitle = (TextView) toolbarTop.findViewById(R.id.toolbar_title); mTitle.setText("@string/....");

4voto

A Sharma Punkte 49

Sie können wie folgt verwenden

4voto

headsvk Punkte 2626

Ich weiß nicht, ob sich etwas in der Appcompat-Bibliothek geändert hat, aber es ist ziemlich trivial, keine Notwendigkeit für Reflektion.

Toolbar-Symbolleiste = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

// Schleife durch alle Symbolleistenkinder direkt nach dem Festlegen der 
// Support-Aktionssymbolleiste, da dem Textansichtselement keine ID zugewiesen wurde

// stellen Sie auch sicher, dass die Aktivität hier einen Titel hat
// denn wenn Sie setText() mit einem leeren String aufrufen, wird tatsächlich
// das Textansichtselement aus der Toolbar entfernt

TextView toolbarTitle = null;
for (int i = 0; i < toolbar.getChildCount(); ++i) {
    View child = toolbar.getChildAt(i);

    // vorausgesetzt, dass der Titel das erste Vorkommnis von TextView ist
    // Sie können auch überprüfen, ob der Titelstring übereinstimmt
    if (child instanceof TextView) {
        toolbarTitle = (TextView)child;
        break;
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X