¿Cómo centrar el título de la ActionBar en Android?
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);
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 Actionbar
con 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));
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);
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);