Binden Sie Zuhörer in ein benutzerdefiniertes Menü für alle Aktivitäten in Android
-
20-12-2019 - |
Frage
Ich bin neu in der Android-Entwicklung.Ich möchte, dass jede Aktivität oben rechts das gleiche benutzerdefinierte Popup-Menü hat.Ich verwende ein LinearLayout in xxmenu.xml
und fügen Sie es in die Layout-XML-Dateien jeder Aktivität ein.Die Anzeige ist in Ordnung.Als die OnClickListener
sollte gleich sein, ich möchte das nicht implementieren OnClick
Funktionen in der Java-Datei jeder Aktivität.Wie kann ich das machen?
Ich weiß, dass Android über eine inhärente Menülösung verfügt OptionsMenu
, aber ich weiß nicht, ob oder wie es angepasst werden kann (z. B. ich möchte es in der oberen rechten Ecke haben, mit unterschiedlichen Hintergründen, jedes Element hat ein Bildsymbol, gefolgt von texts
, one-side shadow
, usw.)
Lösung 2
Die Lösung besteht zunächst darin, eine Basisklasse zu definieren (z. B. BaseActivity
) erweitern Activity
, und die eigentlichen Aktivitäten können über dieses Menü erweitert werden BaseActivity
(z.B., MainActivity extends BaseActivity
).
Zweitens: Verwenden Sie eine separate XML-Datei, um das Menülayout zu definieren und es in andere Layouts einzubinden.Eine einfache Möglichkeit, die Zuhörer zu binden, ist die Verwendung android:onClick="toggleMenu"
.
Drittens: Implementieren public void toggleMenu(View v)
in BaseActivity.
Wir können die Ansichten auch aufrufen und die Bindungen im Java-Code vornehmen.Aber ich bin auf ein Codesequenzproblem gestoßen, das auftrat, wenn ich die anklickbare Ansicht über erhalte findViewById
In BaseActivity
'S onCreate()
, es kehrt zurück null
, und die Bindung schlägt fehl.Daher sollte das Finden der Ansichten und der folgenden Bindungen in den untergeordneten Klassen erfolgen (z. B. MainActivity
), nach dem Anruf super.onCreate()
.
Andere Tipps
Erstellen Sie eine abstrakte BaseActivity-Klasse, die implementiert onCreateOptionsMenu
Und onOptionsItemSelected
für Ihre gemeinsamen Menüs und Menüpunkte.Dann lassen Sie alle Ihre anderen Aktivitäten davon ausgehen.