web-dev-qa-db-fra.com

Comment ajouter un bouton de menu sans barre d'action?

Je voudrais ajouter un bouton de menu dans le coin supérieur droit de mon application et sans barre d'action, comme c'est le cas dans l'application Google Fit sur la capture d'écran ci-dessous. Quelqu'un peut-il m'aider?

menu button without action bar

31
dzikovskyy

Vous pouvez simplement utiliser PopupMenu, par exemple ajouter ce qui suit à un bouton lorsque vous cliquez dessus:

public void showPopup(View v) {
    PopupMenu popup = new PopupMenu(this, v);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.actions, popup.getMenu());
    popup.show();
}

Pour plus d'informations, lisez Creating a Popup Menu: http://developer.Android.com/guide/topics/ui/menus.html

49
M-Y

Ajoutez une barre d'outils à la mise en page et rendez-la transparente. C'est la meilleure solution pour ajouter des éléments de menu à une mise en page tout en donnant l'apparence qu'il n'y a pas de barre d'action/barre d'outils.

Disposition

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <!-- The rest of your code here -->

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="56dp"
        Android:background="@Android:color/transparent"/>

</RelativeLayout>

Thème

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
    </style>
</resources>

Exemple de gonflage du menu, définition du titre, écouteur de clic sur le menu.

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("Toolbar");
toolbar.inflateMenu(R.menu.menu_main);
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        if (item.getItemId() == R.id.action_refresh) {

        }
        return false;
    }
});

Ne définissez pas la barre d'outils comme barre d'action. Le thème le supprime totalement.

17
Eugene H
<ImageButton
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:src="@drawable/ic_overflow_holo_dark"
    Android:contentDescription="@string/descr_overflow_button"
    Android:onClick="showPopup" />

Ajoutez les lignes ci-dessus dans le fichier xml où vous souhaitez afficher ce menu.

public void showMenu(View v) {

    PopupMenu popup = new PopupMenu(this, v);
    // This activity implements OnMenuItemClickListener
    popup.setOnMenuItemClickListener(this);
    popup.inflate(R.menu.actions);
    popup.show();
}

@Override
public boolean onMenuItemClick(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.archive:
            archive(item);
            return true;
        case R.id.delete:
            delete(item);
            return true;
        default:
            return false;
    }
}

Pour plus de détails, consultez: https://developer.Android.com/guide/topics/ui/menus.html

5
Aashish

Je ne pense pas que vous puissiez ajouter un menu sans barre d'action. Mais il y a 2 approches auxquelles je peux penser.

  1. Créez et barre d'action de la même couleur que celle de l'arrière-plan pour qu'elle ne s'affiche pas, ajoutez ensuite les menus.

  2. Ajoutez simplement un bouton dans le coin supérieur droit de l'écran et placez la liste déroulante dans la mise en page.

Ou utilisez un menu contextuel comme suggéré par @ M-Y

1
user2520215