2012-10-19 13 views
20

Sto cercando di creare una barra delle azioni senza il logo/testo dell'app e con un'immagine centralizzata, e so che è possibile con una vista personalizzata, ecco il mio codice:ActionBarSherlock - Schede che appaiono SOPRA la barra delle azioni con vista personalizzata

protected void initActionBar() 
{ 
    RelativeLayout custom = new RelativeLayout(getApplicationContext()); 
    ActionBar.LayoutParams params = new ActionBar.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
    custom.setLayoutParams(params); 

    custom.setGravity(Gravity.CENTER); 
    custom.setBackgroundDrawable(getResources().getDrawable(R.drawable.background_grad_grey_rounded)); 

    ImageView image =new ImageView(getApplicationContext()); 
    image.setBackgroundResource(R.drawable.ic_launcher); 
    custom.addView(image); 

    ab = getSupportActionBar(); 


    ab.setDisplayShowCustomEnabled(true); 
    ab.setCustomView(custom); 
    ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    tab_connect = ab.newTab(); 
    tab_connect.setText("CONNECT"); 
    tab_connect.setTabListener(this); 

    tab_discover = ab.newTab(); 
    tab_discover.setText("DISCOVER"); 
    tab_discover.setTabListener(this); 

    tab_simplify= ab.newTab(); 
    tab_simplify.setText("SIMPLIFY"); 
    tab_simplify.setTabListener(this); 

    ab.addTab(tab_simplify); 
    ab.addTab(tab_discover); 
    ab.addTab(tab_connect); 

    ab.setDisplayShowTitleEnabled(false); 
    ab.setDisplayShowHomeEnabled(false); 

} 

tuttavia quando mi nascondo il logo, i turni ActionBar sotto le mie schede in questo modo:

screen shot

ma se ho impostato ab.setDisplayShowHomeEnabled (vero) l'ActionBar appare al suo posto a destra (ma con il logo che non voglio):

enter image description here

Che cosa sto facendo di sbagliato?

+1

Sembra come un insetto: https://github.com/JakeWharton/ActionBarSherlock/issues/327 – input

+0

Appena provato con la normale ActionBar Android e ha avuto lo stesso problema ... – AndroidNoob

risposta

32

Ecco una soluzione semplice:

utilizzare il seguente nel metodo onCreate:

View homeIcon = findViewById(android.R.id.home); 
((View) homeIcon.getParent()).setVisibility(View.GONE); 

questo crolla completamente il tasto home.

PS: sto usando ActionBar standard, ma questo dovrebbe funzionare lo stesso

O

se si desidera supportare in Sherlock ActionBar a che si deve utilizzare questo

actionBar.setLogo(null); // forgot why this one but it helped 

View homeIcon = findViewById(
     Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
     android.R.id.home : R.id.abs__home); 
((View) homeIcon.getParent()).setVisibility(View.GONE); 
((View) homeIcon).setVisibility(View.GONE); 

actionBar.setDisplayShowTitleEnabled(false); 
12

E ' vale la pena notare che la risposta selezionata funzionerà solo con ActionBar nativo perché l'elemento android.R.id.home non esiste su pre-hc. Cioè, su dispositivi pre-hc, otterrai un NPE.

Poiché si utilizza ActionBarSherlock, si presume che si desidera supportare i dispositivi pre-hc in modo da utilizzare l'ID corretto in base alla versione della piattaforma. ABS esporrà l'equivalente di android.R.id.home tramite R.id.abs__home per la sua implementazione di ActionBar.

Quindi, siamo in grado di modificare la soluzione suggerita come:

View homeIcon = findViewById(
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
        android.R.id.home : R.id.abs__home); 
((View) homeIcon.getParent()).setVisibility(View.GONE); 
+0

Eppure, questo doesn' Mi permetta di usare il titolo come un pulsante "su" come vorrei. – Czechnology

+0

funziona bene ma uno spazio nero non rimane dove il logo era una volta. Come faccio a liberarmi dello spazio nero? – BurninatorDor

6

questo funziona alla grande anche! (Leggere i commenti bugreport;))

actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT)); 
1

Ho usato questo

ActionBar ab = getSupportActionBar(); 
ab.setDisplayShowHomeEnabled(true); 
    ab.setDisplayHomeAsUpEnabled(false); 
    ab.setHomeButtonEnabled(false); 
    ab.setLogo(null); 

    View homeIcon = findViewById(
      Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
      android.R.id.home : R.id.abs__home); 
    ((View) homeIcon.getParent()).setVisibility(View.GONE); 
    ((View) homeIcon).setVisibility(View.GONE); 

    ab.setDisplayShowTitleEnabled(false); 
0

è sufficiente rimuovere la bandiera DISPLAY_SHOW_HOME dal tuo metodo() actionBar.setDisplayOptions.

3

seguente risposta @furyfred, questo codice può essere utilizzato quando si utilizza il ActionBar da AppCompat libreria:

View homeIcon = findViewById(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
      android.R.id.home : android.support.v7.appcompat.R.id.home); 

if (null != homeIcon && null != homeIcon.getParent()) 
{ 
    ((View) homeIcon.getParent()).setVisibility(View.GONE); 
} 
2

Tutti post di cui sopra crollare l'icona casa, ma lasciando uno spazio vuoto. Per evitare che sia necessario impostare la dimensione del logo su zero. Sotto aggiunto il mio codice snippet.it può aiutare gli altri che hanno problemi con lo stesso problema.grazie

 actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT)); 

     View homeIcon = findViewById(
       Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
       android.R.id.home : R.id.abs__home); 
     ((View) homeIcon.getParent()).setLayoutParams(new LinearLayout.LayoutParams(0, 0)); 
     ((View) homeIcon).setVisibility(View.GONE); 
+0

questa è la migliore risposta, altre soluzioni cambiano lo stile della barra delle azioni – marmor

Problemi correlati