Ich versuche, den folgenden Code zu verwenden, um den Text in der zu ActionBar
zentrieren, aber er richtet sich nach links aus.
Wie lässt du es in der Mitte erscheinen?
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle("Canteen Home");
actionBar.setHomeButtonEnabled(true);
actionBar.setIcon(R.drawable.back);
android
android-actionbar
android-theme
Sourabh Saldi
quelle
quelle
Antworten:
Um einen zentrierten Titel in ABS zu haben (wenn Sie diesen in der Standardeinstellung haben möchten
ActionBar
, entfernen Sie einfach die "Unterstützung" in den Methodennamen), können Sie Folgendes tun:In Ihrer Aktivität, in Ihrer
onCreate()
Methode:abs_layout
::Jetzt sollten Sie eine
Actionbar
mit nur einem Titel haben. Wenn Sie einen benutzerdefinierten Hintergrund festlegen möchten, legen Sie ihn im obigen Layout fest (vergessen Sie jedoch nicht, ihn festzulegenandroid:layout_height="match_parent"
).oder mit:
quelle
android:layout_gravity="center"
Problem lösen, indem ich es dem LinearLayout hinzufüge.((TextView)actionBar.getCustomView().findViewById(R.id.textView1)).setText("new title");
, wo textView1 IhreTextView
ID in Ihrer CustomView ist.Ich hatte mit den anderen Antworten nicht viel Erfolg ... unten ist genau das, was für mich unter Android 4.4.3 mit der ActionBar in der Support-Bibliothek v7 funktioniert hat. Ich habe es so eingerichtet, dass das Symbol der Navigationsschublade angezeigt wird ("Burger-Menü-Schaltfläche").
XML
Java
quelle
params
Objekt erstellen ? Können wir die Schwerkraft in der externen Layoutdatei, die wir der ActionBar zuweisen, nicht angeben?Definieren Sie Ihre eigene benutzerdefinierte Ansicht mit Titeltext und übergeben Sie LayoutParams an setCustomView (), wie Sergii sagt.
BEARBEITET : Zumindest für die Breite sollten Sie WRAP_CONTENT oder Ihre Navigationsschublade, Ihr App-Symbol usw. verwenden. WIRD NICHT ANGEZEIGT (benutzerdefinierte Ansicht wird über anderen Ansichten in der Aktionsleiste angezeigt). Dies tritt insbesondere dann auf, wenn keine Aktionsschaltfläche angezeigt wird.
BEARBEITET : Entspricht dem XML-Layout:
Hierfür müssen keine LayoutParams angegeben werden.
quelle
Nur eine kurze Ergänzung zu Ahmads Antwort. Sie können getSupportActionBar (). SetTitle nicht mehr verwenden, wenn Sie eine benutzerdefinierte Ansicht mit einer Textansicht verwenden. So legen Sie den Titel fest, wenn Sie mehrere Aktivitäten mit dieser benutzerdefinierten Aktionsleiste (unter Verwendung dieser einen XML-Datei) in Ihrer onCreate () -Methode haben, nachdem Sie eine benutzerdefinierte Ansicht zugewiesen haben:
quelle
OK. Nach vielen Recherchen, kombiniert mit der oben akzeptierten Antwort, habe ich eine Lösung gefunden, die auch funktioniert, wenn Sie andere Dinge in Ihrer Aktionsleiste haben (Zurück / Home-Taste, Menü-Taste). Im Grunde habe ich die Überschreibungsmethoden in eine grundlegende Aktivität (die alle anderen Aktivitäten erweitern) eingefügt und den Code dort platziert. Dieser Code legt den Titel jeder Aktivität fest, wie er in AndroidManifest.xml bereitgestellt wird, und führt auch andere benutzerdefinierte Aufgaben aus (z. B. Festlegen eines benutzerdefinierten Farbtons für Aktionsleistenschaltflächen und einer benutzerdefinierten Schriftart für den Titel). Sie müssen nur die Schwerkraft in action_bar.xml weglassen und stattdessen Padding verwenden.
actionBar != null
Scheck wird verwendet, da nicht alle meine Aktivitäten einen haben.Getestet am 4.4.2 und 5.0.1
Und meine action_bar.xml ist so (wenn jemand interessiert ist):
BEARBEITEN : Wenn Sie den Titel nach dem Laden der Aktivität in etwas anderes ändern müssen (onCreateOptionsMenu wurde bereits aufgerufen), fügen Sie eine weitere Textansicht in Ihre action_bar.xml ein und verwenden Sie den folgenden Code, um diese neue Textansicht aufzufüllen, Text festzulegen und anzuzeigen es:
BEARBEITEN (25.08.2016) : Dies funktioniert nicht mit der Version 24.2.0 von Appcompat (August 2016), wenn Ihre Aktivität über eine "Zurück-Schaltfläche" verfügt. Ich habe einen Fehlerbericht eingereicht ( Problem 220899 ), weiß aber nicht, ob er von Nutzen ist (Zweifel, dass er bald behoben wird). In der Zwischenzeit besteht die Lösung darin, zu überprüfen, ob die Klasse des Kindes AppCompatImageButton.class entspricht, und dasselbe zu tun. Erhöhen Sie die Breite nur um 30% (z. B. appCompatImageButton.getWidth () * 1.3, bevor Sie diesen Wert vom ursprünglichen Abstand abziehen):
In der Zwischenzeit habe ich dort einige Polster- / Randprüfungen durchgeführt:
quelle
Ohne benutzerdefinierte Ansicht kann der Titel der Aktionsleiste zentriert werden. Es funktioniert auch perfekt für Navigationsschubladen
Viel Spaß beim Codieren. Danke.
quelle
Nach viel Recherche: Das funktioniert tatsächlich:
Sie müssen das Layout custom_actionbar.xml definieren, das Ihren Anforderungen entspricht, z.
quelle
Es funktioniert gut.
Unterhalb des Layouts von custom_actionbar:
quelle
Sie müssen Set
ActionBar.LayoutParams.WRAP_CONTENT
undActionBar.DISPLAY_HOME_AS_UP
quelle
Der beste und einfachste Weg, speziell für diejenigen, die nur eine Textansicht mit Schwerpunkt ohne XML-Layout wünschen.
quelle
Code hier arbeitet für mich.
quelle
Eine reine Kotlin-Lösung, für die keine Änderungen in den XML-Layouts erforderlich sind:
quelle
Hier ist eine vollständige Kotlin + androidx-Lösung, die auf der Antwort von @Stanislas Heili aufbaut. Ich hoffe, es kann für andere nützlich sein. Dies ist der Fall, wenn Sie eine Aktivität haben, die mehrere Fragmente hostet und gleichzeitig nur ein Fragment aktiv ist.
In Ihrer Tätigkeit:
In Ihren Fragmenten:
quelle
Die anderen Tutorials, die ich gesehen habe, überschreiben das gesamte Layout der Aktionsleiste und verbergen die MenuItems. Ich habe es funktioniert, indem ich nur die folgenden Schritte mache:
Erstellen Sie eine XML-Datei wie folgt:
Und in der Klasse mach es:
quelle
Für Kotlin-Benutzer:
Verwenden Sie in Ihrer Aktivität den folgenden Code:
Und das XML / Ressourcen-Layout:
quelle
Dieser Code verbirgt die Zurück-Schaltfläche nicht. Gleichzeitig wird der Titel in der Mitte ausgerichtet.
Rufen Sie diese Methode in oncreate auf
quelle