¿Cómo centrar el título de la ActionBar en Android?

Resuelto Sourabh Saldi asked hace 54 años • 18 respuestas

Estoy intentando utilizar el siguiente código para centrar el texto en ActionBar, pero se alinea a la izquierda.

¿Cómo se hace para que aparezca en el centro?

ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle("Canteen Home");
actionBar.setHomeButtonEnabled(true);
actionBar.setIcon(R.drawable.back);
Sourabh Saldi avatar Jan 01 '70 08:01 Sourabh Saldi
Aceptado

Para tener un título centrado en ABS (si desea tenerlo de forma predeterminada ActionBar, simplemente elimine el "soporte" en los nombres de los métodos), puede hacer esto:

En tu Actividad, en tu onCreate()método:

getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
getSupportActionBar().setCustomView(R.layout.abs_layout);

abs_layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
        android:layout_gravity="center"
    android:orientation="vertical">

    <androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/tvTitle"
        style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="#FFFFFF" />

</LinearLayout>

Ahora deberías tener un Actionbarcon solo un título. Si desea configurar un fondo personalizado, configúrelo en el Diseño de arriba (pero no olvide configurarlo android:layout_height="match_parent").

o con:

getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.yourimage));
Ahmad avatar Sep 12 '2012 12:09 Ahmad

No he tenido mucho éxito con las otras respuestas... a continuación se muestra exactamente lo que funcionó para mí en Android 4.4.3 usando ActionBar en la biblioteca de soporte v7. Lo tengo configurado para mostrar el ícono del cajón de navegación ("botón de menú de hamburguesas")

XML

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/actionbar_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:maxLines="1"
        android:clickable="false"
        android:focusable="false"
        android:longClickable="false"
        android:textStyle="bold"
        android:textSize="18sp"
        android:textColor="#FFFFFF" />

</LinearLayout>

Java

//Customize the ActionBar
final ActionBar abar = getSupportActionBar();
abar.setBackgroundDrawable(getResources().getDrawable(R.drawable.actionbar_background));//line under the action bar
View viewActionBar = getLayoutInflater().inflate(R.layout.actionbar_titletext_layout, null);
ActionBar.LayoutParams params = new ActionBar.LayoutParams(//Center the textview in the ActionBar !
        ActionBar.LayoutParams.WRAP_CONTENT, 
        ActionBar.LayoutParams.MATCH_PARENT, 
        Gravity.CENTER);
TextView textviewTitle = (TextView) viewActionBar.findViewById(R.id.actionbar_textview);
textviewTitle.setText("Test");
abar.setCustomView(viewActionBar, params);
abar.setDisplayShowCustomEnabled(true);
abar.setDisplayShowTitleEnabled(false);
abar.setDisplayHomeAsUpEnabled(true);
abar.setIcon(R.color.transparent);
abar.setHomeButtonEnabled(true);
Someone Somewhere avatar Jun 11 '2014 21:06 Someone Somewhere

Defina su propia vista personalizada con el texto del título, luego pase LayoutParams a setCustomView(), como dice Sergii.

ActionBar actionBar = getSupportActionBar()
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
actionBar.setCustomView(getLayoutInflater().inflate(R.layout.action_bar_home, null),
        new ActionBar.LayoutParams(
                ActionBar.LayoutParams.WRAP_CONTENT,
                ActionBar.LayoutParams.MATCH_PARENT,
                Gravity.CENTER
        )
);

EDITADO : al menos para el ancho, debe usar WRAP_CONTENT o el cajón de navegación, el ícono de la aplicación, etc. NO SE MOSTRARÁ (la vista personalizada se muestra encima de otras vistas en la barra de acciones). Esto ocurrirá especialmente cuando no se muestra ningún botón de acción.

EDITADO : Equivalente en diseño xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal"
    android:orientation="vertical">

Esto no requiere que se especifique LayoutParams.

actionBar.setCustomView(getLayoutInflater().inflate(R.layout.action_bar_home, null);
ypresto avatar May 15 '2014 05:05 ypresto