codestory

Die Anleitung zu Android PopupMenu

  1. Android Popup Menu
  2. Ein Beispiel für das Popup-Menu

1. Android Popup Menu

In Android ist das Popup Menu ein schwebendes Menü, das Sie erstellen und in jeder View (Ansicht) verankern können. In Bezug auf die Interface und Verwendung gibt es keinen Unterschied zu einem Context Menu.
Sie können Android Resource File (XML) verwenden, um die Interface eines PopupMenu zu entwerfen. Das PopupMenu einer Anwendung ist jedoch recht einfach. Daher ist es auch eine gute Wahl, ein PopupMenu vollständig aus Java-Code zu erstellen (siehe Beispiel unten).
Hinweis: Einige Attribute des <item> (Menu Item) haben keine Auswirkung, wenn sie in ein Popup Menu eingefügt werden. Beispiel:
  • app:showAsAction
  • android:icon (Not work in Android 3.0+/API 11+)

2. Ein Beispiel für das Popup-Menu

In Android Studio erstellen Sie ein neues Projekt.
  • File > New > New Project > Empty Activity
    • Name: PopupMenu
    • Package name: org.o7planning.popupmenuexample
    • Language: Java
Achtung: Seit Android 3.0 (API 11) unterstützt PopupMenu keine icons (Symbole) mehr. Sie können jedoch einige der folgenden icons (Symbole) in den drawable folder (Zeichenordner) kopieren, um ältere Android-Geräte zu unterstützen, oder Sie können diesen Schritt einfach überspringen
icon_upload.png
icon_bookmark.png
icon_share.png
Die Haupt-Interface der Anwendung ist mit 2 Buttons (Tasten) sehr einfach. Wenn Benutzer auf Button1 klicken, wird ein PopupMenu angezeigt und in Button2 verankert.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="Check Me"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:text="PopupMenu will anchor on me"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button1" />
</androidx.constraintlayout.widget.ConstraintLayout>
In Android Studio wählen Sie:
  • File > New > Android Resource File
  • File name: layout_popup_menu.xml
  • Resource type: Menu
In Android Studio entwerfen Sie die Interface für Popup Menu:
Legen Sie ID, Title, Icon für Menu Item fest:
layout_popup_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menuItem_upload"
        android:icon="@drawable/icon_upload"
        android:title="Upload" />
    <item
        android:id="@+id/menuItem_bookmark"
        android:icon="@drawable/icon_bookmark"
        android:title="Bookmark" />
    <item
        android:id="@+id/menuItem_share"
        android:icon="@drawable/icon_share"
        android:title="Share">
        <menu>
            <item
                android:id="@+id/menuItem_facebook"
                android:title="Facebook" />
            <item
                android:id="@+id/menuItem_instagram"
                android:title="Instagram" />
        </menu>
    </item>
</menu>
MainActivity.java
package org.o7planning.popupmenuexample;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity  {

    public static final String LOG_TAG =  "PopupMenuExample";

    private Button button1;
    private Button button2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.button1 = (Button) findViewById(R.id.button1);
        this.button2 = (Button) findViewById(R.id.button2);

        this.button1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                button1Clicked( );
            }
        });
    }

    // User click on the Button 1.
    private void button1Clicked( )  {
        // When user click on the Button 1, create a PopupMenu.
        // And anchor Popup to the Button 2.
        PopupMenu popup = new PopupMenu(this, this.button2);
        popup.inflate(R.menu.layout_popup_menu);

        Menu menu = popup.getMenu();
        // com.android.internal.view.menu.MenuBuilder
        Log.i(LOG_TAG, "Menu class: " + menu.getClass().getName());

        // Register Menu Item Click event.
        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                return menuItemClicked(item);
            }
        });

        // Show the PopupMenu.
        popup.show();
    }

    // When user click on Menu Item.
    // @return true if event was handled.
    private boolean menuItemClicked(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menuItem_bookmark:
                Toast.makeText(this, "Bookmark", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menuItem_upload:
                Toast.makeText(this, "Upload", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menuItem_facebook:
                Toast.makeText(this, "Share Facebook", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menuItem_instagram:
                Toast.makeText(this, "Share Instagram", Toast.LENGTH_SHORT).show();
                break;
            default:
                Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }
}
Sie können PopupMenu durch die Java Code auch erstellen:
// Create a PopupMenu using Java.
public void createPopupMenu(Context activity, View anchorView ) {
    // Create a PopupMenu and anchor it on a View.
    PopupMenu popupMenu = new PopupMenu(activity, anchorView);

    Menu menu = popupMenu.getMenu();

    // groupId, itemId, order, title
    MenuItem menuItemUpload = menu.add(1, 1, 1, "Upload");
    MenuItem menuItemBookmark = menu.add(2, 2, 2, "Bookmark");
    menuItemUpload.setIcon(R.drawable.icon_upload);
    menuItemBookmark.setIcon(R.drawable.icon_bookmark);

    // groupId, itemId, order, title
    SubMenu subMenuShare=  menu.addSubMenu(3, 3, 3, "Share");
    subMenuShare.setIcon(R.drawable.icon_share);

    subMenuShare.add(4, 31, 1, "Google" );
    subMenuShare.add(5, 32, 2, "Instagram");
}

Anleitungen Android

Show More