2010-06-05 9 views
9

Ich habe eine ListActivity und ich möchte für jedes der Listenelemente Kontextmenü zu implementieren. Ich weiß, dass die gängige Methode ist, das Kontextmenü bei langem Klick/Tippen anzuzeigen. Ich möchte wissen, ob es eine Möglichkeit gibt, das Kontextmenü für jedes Element bei einem Tastendruck anzuzeigen (vorzugsweise die Menütaste). Um meine Frage neu zu formulieren, wie kann ich das Kontextmenü und nicht das Optionsmenü durch Drücken der Menütaste (oder einer anderen Taste) auslösen.So implementieren Sie das Kontextmenü auf Tastendruck anstelle von langem Klick/Tippen

Antwort

8

Um das Kontextmenü zu öffnen, rufen Sie openContextMenu(). Um es über einen Schlüssel auszulösen, überschreiben Sie onKeyDown() oder onKeyUp().

Das sagte, ich wirklich nicht empfehlen.

Benutzer beschweren sich, dass Android keine UI-Standards hat. Stattdessen verfügt Android über UI-Konventionen, die Entwicklern eine gewisse Freiheit bieten (und, was noch wichtiger ist, sind keine Hindernisse, um Ihre App im Android Market zu platzieren).

Allerdings ist der Punkt dieser Benutzer sehr gültig - ihre Erfahrung ist beeinträchtigt, wenn Apps sich entscheiden, auf einer UI-Tangente zu gehen. Die Entscheidung, die MENÜ-Taste zum Öffnen eines Kontextmenüs zu verwenden, wäre eine solche Tangente. Für den Anfang, auf Touch-Screen-Geräten, wird dies nicht sehr gut funktionieren, weil es in Ihrem ListView kein ausgewähltes Element gibt, so dass es für den Benutzer unklar wäre, was das MENU betrifft.

Ich vermute, dass es eine bessere Lösung für welches Problem Sie denken, dass Sie auf diese Weise lösen.

+2

Ich bin damit einverstanden, dass es einige regelmäßige Konventionen sein muss für die Entwickler der Verbraucher Android-Erfahrung konsequenter von einem machen zu folgen App zu einem anderen. Für diese spezifische Frage glaube ich jedoch, dass es Situationen gibt, in denen es angemessen ist und ich dies selbst getan habe. – mtmurdock

+1

@ mtmurdock: Sie sind herzlich willkommen zu Ihrer Meinung. Das Android-Kernteam scheint es nicht zu teilen: http://developer.android.com/guide/practices/ui_guidelines/menu_design.html – CommonsWare

6

Ich habe das gleiche für eine meiner Apps getan, weil es für meine App sinnvoll war. Der beste und einfachste Weg dies zu tun ist, onListItemClick() für Ihre listActivity zu überschreiben. Dies ist besser als onKeyDown(), da es sich speziell auf das fragliche Listenelement (Ansicht) bezieht und nur für die Listenelemente und nicht für den Rest des Bildschirms gilt.

onListItemClick(ListView l, View v, int position, long id) 
{ 
    v.showContextMenu(); 
} 

dann alles, was Sie tun müssen, um das Kontextmenü Methoden außer Kraft setzen und Sie sind golden

Verwandte Themen