2012-10-05 7 views

risposta

39

Come ho notato in un commento, non sono esattamente sicuro che nulla di tutto ciò cambierebbe con ABS (sono sicuro che non sarebbe molto), ma con la barra di azione standard è possibile caricare un layout personalizzato .xml per il tuo titolo della barra delle azioni. Ad esempio, si potrebbe avere action_bar_title.xml:

<?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" 
    android:background="@drawable/your_desired_background" > 

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

</RelativeLayout> 

Poi, nella vostra attività, si vorrebbe chiamare un metodo come questo in onCreate():

private void setupActionBar() { 
     ActionBar ab = getActionBar(); 
     ab.setDisplayShowCustomEnabled(true); 
     ab.setDisplayShowTitleEnabled(false); 
     ab.setIcon(R.drawable.your_left_action_icon); 
     LayoutInflater inflator = (LayoutInflater) this 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = inflator.inflate(R.layout.action_bar_title, null); 

     TextView titleTV = (TextView) v.findViewById(R.id.title); 
     Typeface font = Typeface.createFromAsset(getAssets(), 
       "fonts/your_custom_font.ttf"); 
     titleTV.setTypeface(font); 

     ab.setCustomView(v); 

      ab.setHomeAsUpEnabled(true); 
    } 

di prendere il controllo della sinistra elemento di azione, si potrebbe fare questo nella vostra attività:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.yourRightActionItem: 
         //do something 
         return true; 
     case android.R.id.home: //<-- this will be your left action item 
      // do something 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 

Naturalmente, assicurarsi di fare anche le altre configurazioni necessarie per gli elementi di azione nel vostro menu di XML pure. Questo sarà per tutti gli elementi di azione a lato destro.

Modifica: Appena visto in un altro commento hai detto che il titolo sarebbe un'immagine. Se questo è il caso, basta sostituire il TextView che ho usato nel mio esempio con ImageView e ignorare il codice di personalizzazione del font nel metodo setupActionBar().

Edit2: Ho aggiornato il mio codice Java. Dovrai fare ab.setHomeAsUpEnabled (true), e poi avere un tema personalizzato per implementare un invisibile (o forse @null anche se non so se Android accetterà quello) drawable per la home come indicatore up. Vedi qui (preso dalla risposta here :)

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo"> 
    <item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item> 
    <!-- or you could try @null --> 
</style> 
+0

per cui la soluzione alla voce di azione sulla sinistra potrebbe essere quella di fingere con UP pulsante come ho scritto nel primo commento, giusto? – urSus

+0

Sì, e vorresti aggiungere uno stile personalizzato per Android: homeAsUpIndicator in modo da non ottenere quell'indicatore di chevron a sinistra. Aggiornerò con più codice. – dennisdrew

+0

Come posso nascondere la freccia senza Android: homeAsUpIndicator? Richiede API 11 e il mio minimo è 8 –