2013-10-08 14 views
14

Ciao Sto sviluppando un'applicazione Android. Nella mia applicazione sto usando la barra delle azioni. Voglio allineare il centro del mio titolo di finestra in action-bar. So che è possibile utilizzare i file xml. ma voglio farlo usando lo stile in modo che sia applicabile per ogni mia finestra, come fare questo ha bisogno di aiuto. Grazie.Centro Allinea il titolo nella barra delle azioni usando gli stili in Android.

+0

Ho provato con xml il suo funzionamento ma voglio farlo con gli stili. perché per ogni finestra il mio titolo sarà nel mezzo. Quindi voglio farlo con gli stili. – nilkash

+0

qualcuno può aiutare http://stackoverflow.com/questions/31803463/how-to-set-action-bar-title-center-in-navigation-drawer – Aditya

risposta

9

So che è possibile utilizzare i file xml. ma voglio farlo usando lo stile in modo che sia applicabile per ogni mia finestra, come fare questo bisogno di aiuto .

Si usa ancora xml per fare ciò. Basta applicare l'applicazione di stile in modo ampio e non solo a una singola attività. Si prega di consultare la documentazione di Android per una descrizione completa:

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

Applicare quindi il tema per l'intera applicazione o singole attività:

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

EDIT: Ecco come si dovrà gestire il centraggio del titolo:

Nel tuo action_bar.xml avrai qualcosa del genere:

<?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> 

Poi, nel tuo onCreate() avrete qualcosa di simile:

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

Se avete bisogno di avere questo in ogni attività, si hanno 2 scelte:

  1. Il modo forza bruta : Inserisci la riga di codice sopra nel onCreate di ogni attività.
  2. Estendi attività e inserisci il codice di inizializzazione ActionBar in onCreate. Quindi estendi la tua classe di attività personalizzata per ogni attività. Non dimenticare di chiamare il super() in ogni Activity onCreate().
+1

grazie per l'aiuto Ho controllato il tuo dato link. In realtà sono in grado di impostare la dimensione del colore del titolo ma non riesco a fare allineare il senter. Hai qualche idea in merito. Ho bisogno di aiuto. grazie. – nilkash

+0

Aggiornato la mia risposta. Spero che ti aiuti. – SBerg413

+0

grazie per l'aiuto. L'ho fatto allo stesso modo Ma sento ancora che non sono autorizzato a centrarlo attraverso gli stili. :( – nilkash

29

Metodo semplice per centrare ActionBarTitle senza utilizzare il layout personalizzato per actionBar.

Ma prima di quel primo nascondere fino Icona come:

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); 
    } 
} 
+0

funziona .. !! –

+2

La ripetizione dello stesso con action_bar_subtitle centra anche il sottotitolo della barra delle azioni. – Intrications

+3

Funziona, ma se ActionBar ha MenuItems, il titolo si sposta alcuni pixel a sinistra – saiyancoder

4

Unfortunally, la via di SBerg413 non funziona per me.

mio layout personalizzato è

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

E tutto funziona perfettamente:
http://i.stack.imgur.com/MvQgj.png

UPD: questa attività io uso come un genitore per tutte le mie attività, che dovrebbe avere la barra delle azioni.

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

@ La risposta di Napolean mi ha aiutato, ma nel mio caso sto usando Xamarin Android (monodroid).Ecco la traduzione del suo codice in 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); 
+0

Da dove chiami questo codice? L'ho eseguito dall'attività principale, ma quando OnConfigurationChange viene attivato da una rotazione, il centraggio viene ripristinato. – Ian

Problemi correlati