Die Anleitung zu Android ContextMenu
View more Tutorials:
Wenn Sie keinen Platz auf Ihrer Benutzer-Interface für eine wesentliche Funktion zuweisen können, können Sie ein Context Menu verwenden. Das Context Menu ist ein schwebendes Menü, das angezeigt wird, um auf ein langes Drücken zu reagieren, nämlich standardmäßig 500 Millisekunden. Das Context Menu kann mehrere Menu Items und Sub Menus enthalten.

In Android beträgt eine standardmäßige lange Druckdauer 500 Millisekunden. Sie können diesen Wert festlegen, indem Sie die ViewConfiguration.getLongPressTimeout()-Methode aufrufen. Benutzer können diesen Wert in Settings (Einstellungen) anpassen, die für alle Anwendungen auf dem Gerät funktionieren.

Als Anwendungsentwickler können Sie keinen anderen Wert für "die lange Druckdauer" festlegen. Sie können jedoch definitiv einige Tricks verwenden, um eine lange Druckphase mit Anpassungszeitraum zu simulieren und einige verwandte Aktionen auszuführen. (Weitere Informationen finden Sie im Anhang am Ende des Artikels.)
Wenn eine View (Ansicht) für ein Long-Press-Ereignis registriert ist, ruft das System die Methode onCreateContextMenu() auf, um das Context Menu zu erstellen und anzuzeigen.
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.button = (Button) this.findViewById(R.id.button_test); this.registerForContextMenu(this.button); } @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, view, menuInfo); menu.setHeaderTitle("Context Menu"); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.layout_context_menu, menu); } // You may not need "Android Resource File" to have a ContextMenu. // Using Java to create Context Menu. public void onCreateContextMenu_2(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, view, menuInfo); menu.setHeaderTitle("Context Menu"); // groupId, itemId, order, title MenuItem menuItemUpload = menu.add(1, 1, 1, "Upload"); MenuItem menuItemBookmark = menu.add(2, 2, 2, "Bookmark"); // groupId, itemId, order, title SubMenu subMenuShare= menu.addSubMenu(3, 3, 3, "Share"); subMenuShare.add(4, 31, 1, "Google" ); subMenuShare.add(5, 32, 2, "Instagram"); }
Wenn Benutzer auf ein Menu Item klicken, wird die Methode onContextItemSelected() aufgerufen.
@Override public boolean onContextItemSelected(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; }
Mit der XML Android Resource File können Sie die Interface eines Context Menu entwerfen. Das Context Menu einer Anwendung ist jedoch recht einfach. Daher ist es auch eine gute Wahl, ein Context Menu vollständig aus Java-Code zu erstellen (siehe Beispiel unten).

Hinweis: Einige Attribute des <item> (Menu Item) haben keine Auswirkung, wenn sie in ein Context Menu eingefügt werden, z. B.:
- app:showAsAction
- android:icon (Not work in Android 3.0+/API 11+)
Ok, jetzt werden wir ein Beispiel für das Context Menu setzen. Lassen Sie uns eine Vorschau des Beispiels anzeigen:

Auf Android Studio erstellen Sie ein neues Projekt.

- Name: ContextMenuExample
- Package name: org.o7planning.contextmenuexample

Hinweis: Seit Android 3.0 (API 11) werden im Context Menu keine icons unterstützt. Sie können jedoch einige der folgenden icons in den drawable Ordner (Zeichenordner) kopieren, um ältere Android-Geräte zu unterstützen, oder diesen Schritt überspringen.
icon_upload.png | icon_bookmark.png | icon_share.png |

Die Hauptoberfläche der Anwendung ist mit nur einer Button äußerst einfach. Wenn Benutzer lange auf die Button drücken, wird ein Context Menu angezeigt.

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/button_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="48dp" android:text="Long Press Me" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Auf Android Studio wählen Sie:
- File > New > Android Resource File

- File name: layout_context_menu.xml
- Resource type: Menu


Beginnen Sie unter Android Studio mit dem Entwerfen der Interface von Context Menu :

Legen Sie ID, Title, Icon für Menu Items fest:

layout_context_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.contextmenuexample; import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private static final String LOG_TAG = "ContextMenuExample"; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.button = (Button) this.findViewById(R.id.button_test); this.registerForContextMenu(this.button); } @SuppressLint("RestrictedApi") @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, view, menuInfo); menu.setHeaderTitle("Context Menu"); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.layout_context_menu, menu); // com.android.internal.view.menu.ContextMenuBuilder Log.i(LOG_TAG, ">>>>> Menu class: " + menu.getClass().getName()); // com.android.internal.view.menu.MenuBuilder Log.i(LOG_TAG, ">>>>> Menu superclass: " + menu.getClass().getSuperclass().getName()); } // You may not need "Android Resource File" to have a ContextMenu. // Using Java to create Context Menu. @SuppressLint("RestrictedApi") public void onCreateContextMenu_2(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, view, menuInfo); menu.setHeaderTitle("Context Menu"); // 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"); } @Override public boolean onContextItemSelected(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; } }
-
TODO