Die Anleitung zu Android PopupMenu
View more Tutorials:
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+)
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"); }