2012-03-26 15 views
10

के लिए पॉपअपमेनू के लिए उपयुक्त विकल्प मैंने एक्शनबार पर किसी आइटम को दबाए जाने के बाद प्रदर्शित किए गए मेनू के लिए PopupMenu लागू किया है। मैं सोच रहा हूं कि 11 से पहले एसडीके संस्करणों के लिए क्या विकल्प हैं?प्री-हनीकॉम

संभावित रूप से संदर्भ मेनू जैसा कुछ उपयोग करें। आपके क्या विचार हैं?

हालांकि मेरा वर्तमान कार्यान्वयन मेनू आइटम के साथ एक नई गतिविधि लोड करना है।

+1

मैं 'CHOICE_MODE_SINGLE' के साथ 'अलर्टडिअलॉग' पॉप अप करूंगा। – sastraxi

+0

मैं कुछ ऐसा ही कर रहा हूं !!! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42

उत्तर

13

जैसा कि @ सस्त्र्राक्सी ने सुझाव दिया है, एक अच्छा समाधान 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) लागू करें।

बेहतर विकल्प होगा, जैसा कि ओपी ने लिखा था, यदि आप एक केंद्रित संवाद चाहते थे, या PopupMenu यदि आप चाहते हैं कि मेनू को एक्शन आइटम पर लंगर दिया जाए तो इस विशेष मामले में अलर्टडियलॉग का उपयोग करने के लिए। हालांकि पॉपअप मेनू अजीब हो सकता है, क्योंकि यह ओवरफ्लो मेनू जैसा महसूस करेगा।

+0

ओपी, मुझे लगता है कि आपका उत्तर आपके उपयोग के मामले के लिए बेहतर था, यह देखते हुए कि फ़्लोटिंग संदर्भ मेनू हैं मैंने ऊपर जोड़े गए हैक के बिना केवल लंबे प्रेस पर ट्रिगर किया। – ataulm

+0

बहुत अच्छी तरह से। मैंने खुद को फिर से स्वीकार कर लिया है। अपने उत्तरों को बनाए रखने के लिए धन्यवाद :) –