2012-03-26 18 views
10

私はアクションバーの項目を押した後に表示されるメニューのPopupMenuを実装しました。私はSDKのバージョンが11より前には何があるのでしょうか?ポップアップメニューの代わりにプレハニカム

おそらくコンテキストメニューに似たものを使用してください。あなたの考えは?

現在の実装では、メニュー項目で新しいアクティビティを読み込みます。

+1

私は 'AlertDialog'を' CHOICE_MODE_SINGLE'でポップアップします。 – sastraxi

+0

私はこれと似たようなことをやっています! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42

答えて

13

@astraxiが示唆しているように、良い解決策は、AlertDialogCHOICE_MODE_SINGLEで使用しています。

AlertDialog.Builder builder = new AlertDialog.Builder(MyAndroidAppActivity.this); 
builder.setTitle("Pick color"); 
builder.setItems(R.array.colors, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
      // The 'which' argument contains the index position 
      // of the selected item 
     } 
}); 
builder.setInverseBackgroundForced(true); 
builder.create(); 
builder.show(); 

そして、strings.xmlファイル。

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string-array name="colors"> 
     <item >blue</item> 
     <item >white</item> 
    </string-array> 
</resources> 

参考:Adding a List

+1

これは本当にうまくいきます:) –

7

また、あなたはfloating context menuを使用することができます。


(3年後、実際にはフローティングコンテキストメニューは長いクリックに対してのみ機能し、急いで回答を編集する)

(アクション項目の長いクリックは再びそれをトリガしないように)あなたはそれ登録解除、メニューを開き、コンテキストメニューのビューを登録する必要があるだろう:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == R.id.my_menu_item) { 
     View view = item.getActionView(); 
     registerForContextMenu(view); 
     openContextMenu(view); 
     unregisterForContextMenu(view); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

ともちろん、リンクされたドキュメントに従ってonCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)を実装してください。

オペレータが書いたように、この特定のケースではAlertDialogを使用する方が良いでしょう。中央に表示されたダイアログが必要な場合は、PopupMenuを選択してアクションアイテムに固定します。ポップアップメニューは、オーバーフローメニューのように感じるので奇妙かもしれません。

+0

OP、あなたの答えは、あなたのユースケースの方が良いと思います。私は上に追加したハックなしで長時間押すだけでトリガされました。 – ataulm

+0

非常に良い。私は自分自身に再び受け入れました。あなたの答えを維持してくれてありがとう:) –