web-dev-qa-db-fra.com

La barre d'actions ne montre pas les icônes de la vue d'action

J'utilise le nouveau support de la barre d'action et toutes mes vues d'action sont affichées en débordement et non sous forme d'icônes dans la barre. Mon application est pour 7+ API.

AccueilActivité:

public class HomeActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ActionBar actionBar = getSupportActionBar();
        actionBar.setTitle(R.string.app_name);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.home, menu);
        return true;
    }
}

home.xml

<item
    Android:id="@+id/action_settings"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:title="@string/action_settings"/>
<item
    Android:id="@+id/action_browse"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:title="@string/title_activity_browse"/>
<item
    Android:id="@+id/action_search"
    Android:actionViewClass="Android.widget.SearchView"
    Android:icon="@Android:drawable/ic_menu_search"
    Android:showAsAction="ifRoom|collapseActionView"
    Android:title="@string/text_search"/>
<item
    Android:id="@+id/action_scan"
    Android:icon="@drawable/action_scan"
    Android:showAsAction="always"
    Android:title="@string/title_activity_browse"/>

Je déploie sur Nexus 7 avec 4.3 et sur LGP500 avec 2.3.3 et sans icônes. J'ai également ajouté Android: theme = "@ style/Theme.AppCompat.Light.DarkActionBar" sur le manifeste et mon projet fait correctement référence à Android-support-v7-appcompat comme décrit dans la documentation officielle.

30
Jumpa

vous devez définir vos fichiers de ressources menu avec également les attributs de la bibliothèque de support.

Pour implémenter le support arrière, il les lit au lieu de ceux définis dans l'ancienne version Android version.

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:yourapp="http://schemas.Android.com/apk/res-auto" >

<item
    Android:id="@+id/action_settings"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    yourapp:showAsAction="never"
    Android:title="@string/action_settings"/>
<item
    Android:id="@+id/action_browse"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    yourapp:showAsAction="never"
    Android:title="@string/title_activity_browse"/>
<item
    Android:id="@+id/action_search"
    Android:actionViewClass="Android.support.v7.widget.SearchView"
    Android:icon="@Android:drawable/ic_menu_search"
    Android:showAsAction="ifRoom|collapseActionView"
    yourapp:showAsAction="ifRoom|collapseActionView"
    yourapp:actionViewClass="Android.support.v7.widget.SearchView"
    Android:title="@string/text_search"/>
<item
    Android:id="@+id/action_scan"
    Android:icon="@drawable/action_scan"
    Android:showAsAction="always"
    yourapp:showAsAction="always"
    Android:title="@string/title_activity_browse"/>

</menu>

[~ # ~] nb [~ # ~] rappelez-vous que pour la classe SearchView a changé . il est maintenant utilisé celui de la bibliothèque de support, vous devez donc également mettre à jour votre code dans onCreateOptionsMenu ()

EDIT: ici est un très bon tutoriel sur la façon de migrer d'ActionBarSherlok vers AppCompat

82
Mario Lenci