2012-07-10 3 views
5

enter image description hereAndroid ActionBarSherlock Top Bar

voglio avere una barra delle operazioni come Foursquare. Quello che voglio sono schede come Friends, Explore and Me. Inoltre, sopra le schede voglio avere un layout personalizzato che include alcuni pulsanti come il logo foursquare , Aggiorna e il check-in in foursquare. Ho creato le schede ma non ho potuto modificare il layout sopra le schede in ActionBarSherlock. Come posso risolvere questo problema?

+0

Potresti fornirci una schermata di stampa dell'app Foursquare? – ninetwozero

+0

Ho aggiunto la ps di foursquare. – BCK

+0

Sono abbastanza sicuro che usano un'implementazione personale della barra e non stanno usando ActionBarSherlock. –

risposta

7

Per ottenere un aspetto Foursquare non è necessario pensare di creare un layout sopra le schede. Quando si utilizza ActionBar Sherlock avete solo bisogno di preoccuparsi:

  1. Fare uno sfondo per la barra in alto
  2. Fare un logo per la barra superiore
  3. Aggiunta di elementi in un file menu.xml che ActionBarSherlock utilizzerà per compilare la parte superiore con i pulsanti (purché uno stile che utilizza lo stile Actionbar Sherlock sia associato all'attività).

Così, per 1. e 2. è tutto su come utilizzare il file styles.xml (deve risiedere nella cartella valori nelle cartella res) in questo modo:

<style name="Theme.Example" parent="Theme.Sherlock"> 
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item> 
    <item name="absForceOverflow">true</item>  
</style> 

<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.ActionBar.Solid"> 
    <item name="background">@drawable/actionbar_background</item> <-- the background for top bar 
    <item name="icon">@drawable/actionbar_logo</item> <-- the logo that goes top left in the top bar 
    <item name="backgroundSplit">@drawable/bg_striped_split</item> <-- the image used between the menu items 
</style> 

Per 3. tutto ciò che serve fare è creare voci di menu sotto menu.xml (dovrebbe risiedere nella cartella del menu (se non c'è, creare uno nella cartella res)):

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

<item android:id="@+id/menu_prefs" 
     android:icon="@drawable/settings_icon" 
     android:title="Preferences" 
     android:showAsAction="ifRoom" /> 
</menu> 

l'ultima cosa che dovete fare per vedere le voci di menu è utilizzare queste funzioni nell'attività:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getSupportMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 

public boolean onOptionsItemSelected (MenuItem item) { 

    Intent intent; 

    switch (item.getItemId()) 
    { 
    case R.id.menu_prefs: 

     // Launch Preference Activity 
     intent = new Intent(getBaseContext(), Preferences.class);   
     startActivity(intent); 
     break; 
    } 

    return false; 
} 
+0

Grazie per la risposta. – BCK

+0

C'è un altro problema, a causa del tuo codice voglio avere un ListNavigation o ActionMode quando menu_prefs ha fatto clic. Inoltre, c'è una scheda. Come posso gestirlo? – BCK

+0

@Richard Lewin - Quando si utilizza l'esempio sopra, la navigazione in alto "blu" appare sotto le mie schede - qualsiasi idea del perché e come ottenerla sopra? Inoltre, quando si abbellisce la barra in alto, si rompe nelle schede - in ogni caso per costringerlo a rimanere in cima? – bMon

3

Per impostare gli elementi di azione personalizzati (Aggiorna, Archivia, ...) è necessario eseguire l'override di onCreateOptionsMenu (menu Menu) e impostare il menu personalizzato.

esempio:

menu File/my_menu.xml

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

    <item 
     android:id="@+id/refresh" 
     android:icon="@drawable/ic_menu_refresh" 
     android:title="refresh" 
     android:showAsAction="always"> 
    </item> 

</menu> 

Poi nella vostra attività (o frammento):

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    MenuInflater inflater = getSupportMenuInflater(); 
    inflater.inflate(R.menu.my_menu, menu); 

    // Allow activity and fragments to add items 
    super.onCreateOptionsMenu(menu); 

    return true; 
} 

E per essere avvisati quando vengono selezionate, solo di override onOptionsItemSelected (MenuItem item):

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    switch (item.getItemId()) 
    { 
    case android.R.id.refresh : 
     // refresh your data... 
     return true; 

    default : 
     return super.onOptionsItemSelected(item); 
    } 
} 
+0

Grazie per la risposta. – BCK

+0

@Chinaski - Come sopra: quando si utilizza l'esempio sopra, la navigazione in alto "blu" appare sotto le mie schede - qualsiasi idea sul perché e come ottenerla sopra? Inoltre, quando si abbellisce la barra in alto, si rompe nelle schede - in ogni caso per costringerlo a rimanere in cima? – bMon