web-dev-qa-db-fra.com

Centrer Aligner le titre dans la barre d'action en utilisant des styles sous Android.

Salut, je développe Android. Dans mon application, j'utilise la barre d'action. Je veux faire aligner mon titre de fenêtre dans la barre d'action. Je sais que c'est possible en utilisant des fichiers xml. Mais Je veux le faire en utilisant le style afin qu'il s'applique à toutes mes fenêtres, comment faire cela a besoin d'aide. Merci.

16
nilkash

Je sais que c'est possible en utilisant des fichiers xml. mais je veux le faire en utilisant le style afin qu'il s'applique à toutes mes fenêtres, comment faire cela a besoin d'aide.

Vous utilisez toujours xml pour ce faire. Il suffit d'appliquer l'application de style à grande échelle et pas seulement à une seule activité. Veuillez consulter la documentation Android pour une description complète:

https://developer.Android.com/training/basics/actionbar/styling.html

Appliquez ensuite votre thème à l'ensemble de votre application ou à vos activités individuelles:

<application Android:theme="@style/CustomActionBarTheme" ... />

EDIT: Voici comment vous devrez gérer le centrage du titre:

Dans votre action_bar.xml, vous aurez quelque chose comme ceci:

<?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="wrap_content"
    Android:layout_gravity="center"
    Android:orientation="vertical">

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_centerHorizontal="true"
    Android:text="SOME TITLE"
    Android:textSize="18sp" />
</RelativeLayout>

Ensuite, dans votre onCreate (), vous aurez quelque chose comme:

getSupportActionBar().setCustomView(R.layout.action_bar);

Si vous avez besoin de cela dans chaque activité, vous avez 2 choix:

  1. La méthode de la force brute: mettez la ligne de code ci-dessus dans chaque activité onCreate.
  2. Étendez l'activité et placez votre code d'initialisation ActionBar dans onCreate. Etendez ensuite votre classe d'activité personnalisée pour chaque activité. N'oubliez pas d'appeler le super () dans onCreate () de chaque activité.
9
SBerg413

Méthode simple pour centrer ActionBarTitle sans utiliser de disposition personnalisée pour actionBar.

Mais avant cela, cachez d'abord l'icône comme:

myActionBar.setIcon(new ColorDrawable(Color.TRANSPARENT));

private void centerActionBarTitle() {
    int titleId = 0;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        titleId = getResources().getIdentifier("action_bar_title", "id", "Android");
    } else {
        // This is the id is from your app's generated R class when 
        // ActionBarActivity is used for SupportActionBar
        titleId = R.id.action_bar_title;
    }

    // Final check for non-zero invalid id
    if (titleId > 0) {
        TextView titleTextView = (TextView) findViewById(titleId);
        DisplayMetrics metrics = getResources().getDisplayMetrics();

        // Fetch layout parameters of titleTextView 
        // (LinearLayout.LayoutParams : Info from HierarchyViewer)
        LinearLayout.LayoutParams txvPars = (LayoutParams) titleTextView.getLayoutParams();
        txvPars.gravity = Gravity.CENTER_HORIZONTAL;
        txvPars.width = metrics.widthPixels;
        titleTextView.setLayoutParams(txvPars);
        titleTextView.setGravity(Gravity.CENTER);
    }
}
29
Napolean

Malheureusement, la manière de SBerg413 ne fonctionne pas pour moi.

ma disposition personnalisée est

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <TextView
        Android:id="@+id/custom_action_bar_title"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:gravity="center"
        Android:text="test"
        Android:textColor="@color/action_bar_title_color"
        Android:textSize="@dimen/action_bar_title_size" />
</RelativeLayout>

Et tout fonctionne parfaitement:
http://i.stack.imgur.com/MvQgj.png

UPD: cette activité que j'utilise comme un parent pour toutes mes activités, qui devrait avoir la barre d'action.

public class ActionBarCustomizationActivity extends ActionBarActivity
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.getSupportActionBar().setDisplayShowCustomEnabled(true);

        LayoutInflater inflater = LayoutInflater.from(this);
        View v = inflater.inflate(R.layout.custom_action_bar, null);

        TextView titleTextView = (TextView) v.findViewById(R.id.custom_action_bar_title);
        titleTextView.setText(this.getTitle());
        titleTextView.setTypeface(App.getInstance().getActionBarTypeFace());

        this.getSupportActionBar().setCustomView(v);
    }
}
4
Bazanov Aleksey

La réponse de @ Napolean m'a aidé, mais dans mon cas, j'utilise Xamarin Android (monodroid). Voici la traduction de son code en C #:

var titleId = Resources.GetIdentifier("action_bar_title", "id", "Android");
var titleTextView = FindViewById<TextView>(titleId);
var layoutParams = (LinearLayout.LayoutParams) titleTextView.LayoutParameters;
layoutParams.Gravity = GravityFlags.CenterHorizontal;
layoutParams.Width = Resources.DisplayMetrics.WidthPixels;
titleTextView.LayoutParameters = layoutParams;
titleTextView.Gravity = GravityFlags.Center;
//Added padding because it is slightly off centered.
titleTextView.SetPadding(100, 0,0,0);
3
Karlo Medallo