web-dev-qa-db-fra.com

L'icône de l'application ne s'affiche pas dans la barre d'action.

J'ai suivi les instructions de création d'un nouveau projet Android et j'en ai obtenu un exécutable, à l'exception d'un problème lié à la barre d'action. Le problème est que l'icône de l'application n'est pas affichée à côté du titre de l'application dans la barre d'action. J'ai créé le projet avec la configuration ci-dessous:

  • Kit de développement logiciel minimum requis: API 8: Android 2.2 (Froyo)

  • SDK cible: API 21: Android 4.X (aperçu L)

  • Compiler avec: API 21: Android 4.X (aperçu L)

  • Thème: Holo Light avec Dark Action Bar (Eclipse définit le thème appcompat correspondant)

  • Bibliothèque de support Android 21.0.1

  • Outils de construction du SDK Android 21.1.1

Parce que mon sdk minimum est api 8 qui ne supporte pas la barre d’action, le projet inclut donc un appcompat_v7 library pour autoriser la fonction de barre d’action. Si je règle le sdk minimum sur api 14 (Android 4.0) ou une version ultérieure, le projet n'inclut pas appcompat_v7 library et l'icône de l'application s'affiche également avec succès. Mais j'ai besoin que mon application prenne en charge les anciens Android os aussi bas que l'API 8.). Alors, que dois-je faire pour résoudre ce problème? J'apprécie vraiment votre attention.

P.S: Je suis passé par la tâche ci-dessus sous windows, mac, Eclipse, Android studio et j'ai obtenu le même résultat.

34
jeep

Vous utilisez le AppCompat version 21+ et c’est normal.

La barre d'action suit les directives de conception et utilise un barre d'outils . Comme vous pouvez le lire ici :

L'utilisation de l'icône de l'application avec le titre en tant que présentation standard est déconseillée sur les périphériques API 21 et ultérieurs.

Si vous souhaitez une icône d'application (mais je la décourage), vous pouvez utiliser la méthode setLogo().

Quelque chose comme ça:

ActionBar actionBar = getSupportActionBar();
actionBar.setLogo(R.drawable.my_logo);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
57
Gabriele Mariotti

Ce problème survient lorsque vous utilisez la bibliothèque de support technique révisée 21.

Utilisation:

ActionBar actionBar = getSupportActionBar();
actionBar.setLogo(R.drawable.ic_launcher);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);

Cela a fonctionné pour moi ou vous pouvez utiliser la barre d'outils. Une barre d'outils est une généralisation des barres d'action à utiliser dans les présentations d'application.

Dans la version moderne Android, les développeurs d’UI devraient s’appuyer davantage sur une palette de couleurs visuellement distincte pour les barres d’outils que sur leur icône d’application. L’utilisation de l’icône de l’application et du titre en tant que présentation standard est déconseillée sur les périphériques API 21 et plus récents. .

Référence: https://developer.Android.com/reference/Android/support/v7/widget/Toolbar.html

48
Ishan

Assurez-vous que l’icône est définie dans le fichier manifest.xml, dans la balise d’application, comme suit:

    Android:icon="@drawable/launcher_icon"

Ensuite, dans la méthode onCreate, insérez les lignes suivantes:

    ActionBar ab =getSupportActionBar(); 
    ab.setDisplayShowHomeEnabled(true);
    ab.setIcon(R.drawable.launcher_icon);
9
user3344429

C’est un "problème" courant. Avant de tirer les cheveux en arrière, assurez-vous d’utiliser:

import Android.support.v7.app.ActionBar; //or the v4, haven't tried with that though

et pas:

import Android.app.ActionBar;

et alors:

ActionBar actionBar;
actionBar = getSupportActionBar();

au lieu de:

actionBar = getActionBar();

Et enfin:

if (actionBar != null) {
        // enabling action bar app icon and behaving it as toggle button           
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setIcon(R.drawable.your_icon);
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);
    }
4
ojonugwa ochalifu

Le logo d’attribut n’est utilisé que dans les API de niveau 11 et supérieur (la min actuelle étant de 8), j’étais aussi confus à propos de cette question. Google ne veut peut-être pas que l’icône apparaisse dans la conception matérielle, lorsque le sdk minimum est défini sur 14 ou plus haut et moins de 21 ans, il utilise le thème holo, il a une icône, mais le style appcompat ressemble plus à la conception matérielle, je pense, peut-être que Google oublie simplement de modifier le thème holo

2
cajsaiko

IN Style.xml

 <style name="MyTheme_ActionBar" parent="@style/Theme.AppCompat.Light">
   <item name="icon">@drawable/actionbar_logo</item>
  </style>

En activité, ajoutez ceci et essayez

ActionBar mActionBar = getSupportActionBar();
mActionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP |
                             ActionBar.DISPLAY_SHOW_CUSTOM |
                             ActionBar.DISPLAY_SHOW_HOME);
2
Vikram