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.
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:
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);
}
}
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:
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);
}
}
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);