Supprimer l'icône / le logo de la barre d'action sur Android

146

J'ai essayé de trouver un moyen de supprimer l'icône / le logo de la barre d'action, mais la seule chose que j'ai trouvée après une heure de recherche dans SO, la documentation d'Android et Google est de savoir comment supprimer la barre de titre dans son ensemble. Ce n'est pas ce que je veux. Je souhaite uniquement supprimer l'icône / le logo de la barre de titre.

Quelqu'un sait comment y parvenir? De préférence, j'aimerais faire cela en XML .

Hrafn
la source
1
Vous auriez pu simplement lire le guide API sur la barre d'action. Il le dit directement dans le guide.
Mgamerz
6
Chaque information se trouve quelque part.
Hrafn
pouvez-vous nous montrer ce que vous avez essayé? ce que vous avez trouvé précédemment qui ne fonctionne pas?
DForck42
@ DForck42 Cette question n'est plus vraiment d'actualité (presque 4 ans). Vous pouvez trouver de nombreuses façons d'y parvenir dans les réponses ci-dessous.
Hrafn

Réponses:

58

Si vous avez défini android:logo="..."dans la <application>balise de votre AndroidManifest.xml, vous devez utiliser ces éléments pour masquer l'icône:

thème pré-v11

<item name="logo">@android:color/transparent</item>

thème v11 et supérieur

<item name="android:logo">@android:color/transparent</item>

L'utilisation de ces deux styles a correctement masqué l'icône de la barre d'action sur un appareil 2.3 et 4.4 pour moi (cette application utilise AppCompat ).

Charles Madère
la source
Cela fonctionne, mais dans mon cas, lorsque j'ai une vue de recherche et que je clique dessus / développez-la, l'icône / le logo mon application réapparaît. Des idées?
acrespo
@acrespo hmm Je sais de quoi vous parlez mais je n'ai pas recherché de solution pour celui-là, désolé.
Charles Madere
1
Ce que je fini par faire est mise <application (...) android:logo="@android:color/transparent"> (...)dans mon AndroidManifest.xmlet en forçant useLogopour displayOptionsdans mon style comme celui - ci <item name="android:displayOptions">showHome|useLogo|homeAsUp|showTitle</item> <item name="displayOptions">showHome|useLogo|homeAsUp|showTitle</item>. Cette dernière partie était importante car dans certains appareils (je pense que la plupart du temps post-sucette), le maudit searchview a pris l'appIcon et l'a mis à la place du logo, même si le logo était défini comme transparent: s
acrespo
228

Ajoutez le code suivant dans vos styles de barre d'action:

<item name="android:displayOptions">showHome|homeAsUp|showTitle</item>
<item name="displayOptions">showHome|homeAsUp|showTitle</item>
<item name="android:icon">@android:color/transparent</item> <!-- This does the magic! -->

PS: J'utilise Actionbar Sherlock et cela fonctionne très bien.

Qiqi Abaziz
la source
2
Un bon truc, merci! Il cesse même de prendre de la place dans la barre d'action!
Igor Čordaš
6
Merci .. il a également travaillé dans le code ... actionBar.setIcon (android.R.color.transparent);
Jagdeep Singh
1
Excellente réponse ... :)
Bytecode
24
Certains appareils Samsung s'affichent @android:color/transparenten NOIR. Cela semble fou, mais de nombreux fabricants d'appareils remplacent les paramètres par défaut d'Android; y compris les couleurs. Pour cette raison, je créerais une couleur dans colors.xml comme ceci: <color name="transparent">#00000000</color>et je ferais référence à cela au lieu d'obtenir la valeur d'Android.
Matt W
1
@jose_GD: android: displayOptions est v11 et plus seulement, vous devez donc les deux pour être rétrocompatibles.
Nilzor
115

Si vous ne voulez pas l'icône dans une activité particulière.

getActionBar().setIcon(
   new ColorDrawable(getResources().getColor(android.R.color.transparent)));    
Laksh
la source
45
getActionBar (). setIcon (android.R.color.transparent); semble être suffisant
Garçon
call method getActionBar () .... est une meilleure solution à ce problème (supprimer l'icône de la barre d'action) car si vous utilisez la barre de navigation et la barre d'action, votre barre d'action sera donc au-dessus de la barre de navigation. Si vous utilisez setDisplayShowHomeEnabled (false), la barre de navigation sera sur la barre d'action et vous ne le souhaitez pas.
horkavlna
Je changerais cela en: ColorDrawable cd = new ColorDrawable(getResources().getColor(android.R.color.transparent)); cd.setBounds(0,0,0,0); getActionBar().setIcon(cd); Sans définir les limites, l'icône transparente utilise toujours de l'espace
Aedis
1
@Aedis: affiche toujours un espace vide à gauche de la barre d'actions. Aucune suggestion?
Rowan
Cela fonctionne bien si vous n'avez pas défini de logo. Dans mon cas, j'ai dû utiliser à la setLogoplace de la setIconméthode. Pourtant, bon conseil, m'a mis sur la bonne voie !!
luiscosta
49

Cela a fonctionné pour moi

getActionBar().setDisplayShowHomeEnabled(false);
Brune
la source
2
Cela place la barre d'action sous les onglets / barre de navigation. Apparemment, ce comportement est "par conception" ... code.google.com/p/android/issues/detail?id=36191
Roger Keays
Cela ne répond en aucun cas à la question. Je connaissais cette fonctionnalité, mais je demandais du XML!
Hrafn
Cela semble être la réponse - sinon vous appliquez une solution globale, dont je doute que ce soit ce que tout le monde souhaite. Dans mon cas, je souhaite afficher le logo sur certaines pages, mais sur d'autres pages, cela n'a pas de sens et encombre la barre d'action.
DiscDev
28

Appel

mActionBar.setDisplayHomeAsUpEnabled(true);

en plus de,

mActionBar.setDisplayShowHomeEnabled(false);

masquera le logo mais affichera l'icône Home As Up. :)

Atul O Holic
la source
Cela ne répond en aucun cas à la question. Je connaissais cette fonctionnalité, mais je demandais du XML!
Hrafn
@Hrafn - Je pensais que XML était la réponse préférée et non la SEULE réponse. : (Je suppose que cela aide encore les gens. :)
Atul O Holic
15

Soit conscient que:

<item name="android:icon">@android:color/transparent</item>

Rendra également vos éléments d'options transparents.

Tevlon
la source
13
    //disable application icon from ActionBar
    getActionBar().setDisplayShowHomeEnabled(false);

    //disable application name from ActionBar
    getActionBar().setDisplayShowTitleEnabled(false);
Pawel Miechowiecki
la source
Cela ne répond en aucun cas à la question. Je connaissais cette fonctionnalité, mais je demandais du XML!
Hrafn
12
getActionBar().setIcon(android.R.color.transparent);

Cela a fonctionné pour moi.

dn_c
la source
11

Supprimez ou affichez le titre en utilisant:

getActionBar().setDisplayShowTitleEnabled(true);

Supprimez ou affichez le logo en utilisant:

getActionBar().setDisplayUseLogoEnabled(false);

Enlever tout:

getActionBar().setDisplayShowHomeEnabled(false);
Tiago Gouvêa
la source
Cela ne répond en aucun cas à la question. Je connaissais cette fonctionnalité, mais je demandais du XML!
Hrafn
9

vous pouvez également ajouter le code ci-dessous dans AndroidManifest.xml .

android:icon="@android:color/transparent"

Cela fonctionnera très bien.

Mais j'ai trouvé que cela posait un problème car l'icône du lanceur devenait également transparente.

J'ai donc utilisé:

getActionBar().setIcon(new ColorDrawable(getResources().getColor(android.R.color.transparent)));

et cela a bien fonctionné.

Mais si vous avez plus d'une activité et que vous souhaitez rendre l'icône d'une activité transparente, l'approche précédente fonctionnera.

Sam
la source
2

J'ai utilisé ceci et cela a fonctionné pour moi.

        getActionBar().setIcon(
        new ColorDrawable(getResources().getColor(android.R.color.transparent)));
user2900761
la source
Cela ne répond en aucun cas à la question. Je connaissais cette fonctionnalité, mais je demandais du XML!
Hrafn
2
getActionBar().setIcon(new ColorDrawable(getResources().getColor(android.R.color.transparent)));
getActionBar().setDisplayHomeAsUpEnabled(true);
user3748515
la source
Bienvenue dans Stack Overflow! Habituellement, des réponses similaires aux vôtres sont considérées comme de mauvaise qualité. Pour référence future, vous devriez envisager d'ajouter quelques explications sur le code que vous avez fourni et vous devriez mieux structurer le code (ajoutez 4 espaces au début de chaque ligne, ou sélectionnez-le tout et cliquez sur le symbole {} au-dessus de la zone de texte.) Aussi, vous devriez prêter plus d'attention à la date de la question (il y a plus d'un an) et au fait qu'elle a déjà reçu une réponse (le signe de la coche verte). Bonne chance pour votre programmation :)
Hristo Valkanov
Cela ne répond en aucun cas à la question. Je connaissais cette fonctionnalité, mais je demandais du XML!
Hrafn
1

Je pense que la réponse exacte est: pour api 11 ou supérieur:

getActionBar().setDisplayShowHomeEnabled(false);

autrement:

getSupportActionBar().setDisplayShowHomeEnabled(false);

(car il a besoin d'une bibliothèque de support.)

David
la source
Cela ne répond en aucun cas à la question. Je connaissais cette fonctionnalité, mais je demandais du XML!
Hrafn
1

accédez à votre manifeste et recherchez le tag d'application

  android:icon="@android:color/transparent"// simply add this on place of your icon

..... ... ...

Avinash Ajay Pandey
la source
0

La réponse de Qiqi Abaziz est correcte, mais j'ai toujours eu du mal à le faire fonctionner avec le pack de compatibilité et à appliquer le style aux bons éléments. De plus, le piratage de la transparence est inutile. Voici donc un exemple complet fonctionnant pour la v8 et les versions ultérieures:

valeurs \ styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyActivityTheme" parent="@style/Theme.AppCompat">
        <item name="actionBarStyle">@style/NoLogoActionBar</item> <!-- pre-v11-compatibility -->
        <item name="android:actionBarStyle">@style/NoLogoActionBar</item>
    </style>
    <style name="NoLogoActionBar" parent="@style/Widget.AppCompat.ActionBar">
        <item name="displayOptions">showHome</item> <!-- pre-v11-compatibility -->
        <item name="android:displayOptions">showHome</item>
    </style>
</resources>

AndroidManifest.xml (shell)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">   
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19"/>
    <application android:theme="@android:style/Theme.Light.NoTitleBar">
        <activity android:theme="@style/PentActivityTheme"/>
    </application>
</manifest>
Nilzor
la source
0

Allez dans votre manifeste et trouvez votre activité puis ajoutez ce code:

android:theme="@android:style/Theme.NoTitleBar"

au-dessus de la ligne cachez votre Actionbar.

Si vous avez besoin d'une autre fonctionnalité, vous pouvez voir d'autres options avec (CLR + SPC).

AA
la source
0

Le moyen le plus rapide est de modifier votre Manifest.xml. Si, par exemple, vous souhaitez supprimer le logo de l'activité "Activité" et laisser le logo dans d'autres activités, vous pouvez effectuer les opérations suivantes:

<activity
      android:name=".home.XActivity"
      android:logo="@android:color/transparent"
      android:configChanges="orientation|keyboardHidden" />
 <activity
      android:name=".home.HomeActivity"
      android:configChanges="orientation|keyboardHidden" />
Jordi Alonso
la source
0

Aucun des éléments ci-dessus n'a fonctionné.

Mais cela a fait l'affaire:

override fun onCreate() {
    setContentView(R.layout.activity_main)

    setSupportActionBar(toolbar)
    toolbar.logo = null

(icône supprimée de la barre d'outils)

Dan Alboteanu
la source