2012-10-19 6 views
20

J'essaie de créer une barre d'action sans le logo de l'application/texte, et avec une image centralisée, et je sais qu'il est possible avec une vue personnalisée, voici mon code:ActionBarSherlock - Onglets apparaissant ci-dessus barre d'action avec vue personnalisée

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

} 

mais quand je cache le logo, les quarts de travail de ActionBar ci-dessous mes onglets comme ceci:

screen shot

mais si je mets ab.setDisplayShowHomeEnabled (true) l'actionbar apparaît dans son bon endroit (mais avec le logo que je ne veux pas):

enter image description here

Qu'est-ce que je fais mal?

+1

On dirait un bug: https://github.com/JakeWharton/ActionBarSherlock/issues/327 – input

+0

juste essayé avec le actionbar android normal et eu le même problème ... – AndroidNoob

Répondre

32

Voici une solution simple:

utilisez les touches suivantes dans votre méthode onCreate:

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

ce effondre le bouton d'accueil complètement.

PS: J'utilise ActionBar standard, mais cela devrait fonctionner de la même

Ou

si vous voulez soutenir dans Sherlock actionbar à que vous devez utiliser ce

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

Il Il est à noter que la réponse sélectionnée ne fonctionnera qu'avec le ActionBar natif car l'élément android.R.id.home n'existe pas sur pre-hc. Autrement dit, sur les appareils pré-hc, vous obtiendrez un NPE.

Étant donné que vous utilisez ActionBarSherlock, je suppose que vous souhaitez prendre en charge les périphériques pré-hc, vous devez donc utiliser l'ID correct en fonction de la version de la plateforme. ABS exposera l'équivalent de android.R.id.home via R.id.abs__home pour son implémentation de l'ActionBar.

Ainsi, nous pouvons modifier la solution proposée comme:

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

encore, ce n » t permettez-moi d'utiliser le titre comme un bouton "up" comme je le voudrais. – Czechnology

+0

cela fonctionne bien, mais un espace noir ne reste pas où le logo était une fois. Comment puis-je me débarrasser de l'espace noir? – BurninatorDor

6

cela fonctionne très bien aussi! (Lire les commentaires bugreport;))

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

J'ai utilisé cette

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

juste enlever le drapeau de DISPLAY_SHOW_HOME de votre méthode actionBar.setDisplayOptions().

3

Après réponse @furyfred, ce code peut être utilisé lors de l'utilisation du ActionBar de AppCompat bibliothèque:

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

Tous les post ci-dessus s'effondrer l'icône de la maison, mais en laissant un espace vide. Pour éviter que vous devez définir la taille du logo à zéro. Ci-dessous ajouté mon code snippet.it peut aider pour d'autres qui luttent avec le même problème.grâce

 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

c'est la meilleure réponse, d'autres solutions changent le style de la barre d'action – marmor

Questions connexes