106 votes

Comment centrer le titre ActionBar dans Android?

J'essaie d'utiliser le code suivant pour centrer le texte dans les ActionBar , mais il s'aligne à gauche.

Comment faites-vous apparaître au centre?

 ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle("Canteen Home");
actionBar.setHomeButtonEnabled(true);
actionBar.setIcon(R.drawable.back);
 

204voto

Ahmad Points 21923

Pour archiver avoir un titre centré en ABS (si vous voulez avoir ce par défaut est ActionBar, il suffit de retirer le "support" dans les noms de méthode), vous pourriez faire ceci:

Dans votre Activité, votre onCreate() méthode:

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="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="my Title"
        android:textColor="#ffffff"
        android:id="@+id/mytext"
        android:textSize="18sp" />

</LinearLayout>

Maintenant, vous devriez avoir un Actionbar avec seulement un titre. Si vous souhaitez définir un arrière-plan personnalisé, défini dans la Disposition ci-dessus (mais alors n'oubliez pas d' android:layout_height="match_parent").

ou avec:

getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.yourimage));

36voto

Someone Somewhere Points 8361

Je n'ai pas eu beaucoup de succès avec les autres réponses ... ci-dessous, c'est exactement ce qui a fonctionné pour moi sur Android 4.4.3 en utilisant le ActionBar dans la bibliothèque de support v7. Je l'ai configuré pour afficher l'icône du tiroir de navigation ("bouton du menu Burger")

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);
 

10voto

ypresto Points 13

Définissez votre propre vue personnalisée avec le texte du titre, puis passez LayoutParams à setCustomView (), comme le dit 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
        )
);
 

MODIFIÉ : au moins pour la largeur, vous devez utiliser WRAP_CONTENT ou votre tiroir de navigation, votre icône d'application, etc. NE SERA PAS MONTRÉ (la vue personnalisée est affichée au-dessus des autres vues de la barre d'action). Cela se produira surtout si aucun bouton d'action n'est affiché.

8voto

Jordy Points 261

Juste un ajout rapide à la réponse d'Ahmad. Vous ne pouvez plus utiliser getSupportActionBar (). SetTitle lorsque vous utilisez une vue personnalisée avec un TextView. Donc, pour définir le titre lorsque vous avez plusieurs activités avec ce ActionBar personnalisé (à l'aide de celui-ci xml), dans votre méthode onCreate () après avoir affecté un affichage personnalisé:

 TextView textViewTitle = (TextView) findViewById(R.id.mytext);
textViewTitle.setText(R.string.title_for_this_activity);
 

0voto

Leonardo Cardoso Points 535

Les autres tutoriels que j'ai vus remplacent toute la présentation de la barre d'action, masquant les éléments de menu. Je l'ai fait juste en effectuant les étapes suivantes:

Créez un fichier XML comme suit:

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

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:ellipsize="end"
        android:maxLines="1"
        android:text="@string/app_name"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@android:color/white" />

</RelativeLayout>
 

Et dans la classe le faire:

 LayoutInflater inflator = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflator.inflate(R.layout.action_bar_title, null);

ActionBar.LayoutParams params = new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER);

TextView titleTV = (TextView) v.findViewById(R.id.title);
titleTV.setText("Test");
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X