2011-02-14 20 views
5

मेरे एंड्रॉइड 2.2.2 डिवाइस पर गैलरी वास्तव में अच्छी लगती है। मुझे अपने ऐप में क्या करना अच्छा लगेगा, एक बटन दबाएं और फिर ऐसा मेनू दिखाएं जो इस तरह दिखता है: enter image description hereएंड्रॉइड गैलरी में "शेयर मेनू" जैसे फैंसी पारदर्शी मेनू कैसे बनाएं?

क्या यह किसी भी मानक एंड्रॉइड थीम/शैलियों का उपयोग कर रहा है? क्या कोई इस तरह के मेनू के लिए एक उदाहरण कोड के बारे में जानता है?

संपादित करें: मुझे पता चला कि कोई इस संवाद को डायलॉग के साथ नकल कर सकता है। बातें मैं इस उदाहरण में एक ListView का उपयोग नहीं कर रहा हूँ, संवाद के लिए बस एक ही TextView प्रविष्टि को आसान बनाने के लिए:

   Dialog dialog = new Dialog(MyActivity.this); 
       dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

       dialog.setContentView(R.layout.custom_dialog); 

       TextView text = (TextView) dialog.findViewById(R.id.text); 
       text.setText("Test option 1"); 

       WindowManager.LayoutParams WMLP = dialog.getWindow().getAttributes(); 
       WMLP.gravity = (Gravity.BOTTOM | Gravity.LEFT); 
       WMLP.x = 0; 
       WMLP.y = 0; 
       dialog.getWindow().setAttributes(WMLP); 

       dialog.show(); 

इससे एक डायलॉग बनाता है:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/layout_root" 
       android:orientation="vertical" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       > 
    <TextView android:id="@+id/text" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:textColor="#FFF" 
       android:padding="10dp" 
       /> 
</LinearLayout> 

संवाद दिखा जब मैं एक बटन दबाएँ जो तस्वीर में मेनू के करीब आता है। मुझे अभी भी दो समस्याएं हैं, हालांकि:

1) मैं संवाद के निचले हिस्से में इस छोटे त्रिकोण को कैसे आकर्षित कर सकता हूं, जैसा कि उपर्युक्त चित्र में किया गया है?

2) बटन खोलने वाला बटन नीचे बटन बार के बीच में क्षैतिज रूप से स्थित है। तो जब मैं इसे दबाता हूं, तो संवाद उस बटन के ठीक ऊपर प्रदर्शित होना चाहिए। मुझे क्या करना चाहते हैं यह है:

WMLP.x = middleButton.getLeft() + (middleButton.getWidth()/2) - dialog.getWindow().getDecorView().getPaddingLeft() - (WMLP.width/2); 

समस्या है, WMLP.width है कि -2। मुझे लगता है कि कारण यह है कि लेआउट चौड़ाई "wrap_content" (जो -2 है) पर सेट है और वास्तविक पल इस पल में ज्ञात नहीं है। तो, मैं संवाद की चौड़ाई कैसे निर्धारित कर सकता हूं ताकि मैं इसे किसी अन्य दृश्य पर केंद्रित कर सकूं?

अद्यतन: मैं अंत में इस तरह एक संवाद के लिए एक महान स्रोत पाया: http://www.londatiga.net/it/how-to-create-quickaction-dialog-in-android/

यह मैं वास्तव में क्या चाहते थे और मैं अपने अनुप्रयोग में अब यह उपयोग कर रहा हूँ है।

+1

** [एंड्रॉइड क्विक एक्शन यूआई पैटर्न] का संभावित डुप्लिकेट (http://stackoverflow.com/questions/3059155/android-quick-actions-ui-pattern) और [एंड्रॉइड "शेयर" सबमेनू] (http://stackoverflow.com/questions/4943287/android-share-submenu)** –

+0

@vikas यह आपके द्वारा प्राप्त पहले प्रश्न का एक अलग प्रश्न है। यह दूसरे प्रश्न का डुप्लिकेट होगा लेकिन अब तक इसका कोई अच्छा जवाब नहीं है। –

उत्तर

1

आप इस शांत मेनू को आकर्षित करने के लिए वर्तमान स्थान पर पॉपअपविंडो जोड़कर ऐसा कर सकते हैं, आपको इस पृष्ठभूमि की छवि और लिटल तीर भी आकर्षित करने की आवश्यकता होगी।

इसके अलावा आपको इसे करने के लिए नौ-पथ ड्रायबल के बारे में भी पढ़ना चाहिए।

पीएस: मैंने पहले से ही यह किया है, लेकिन एक और छवि के साथ।

+1

लेकिन क्या आप उस तीर की नोक को उस विशिष्ट बिंदु पर डाल सकते हैं जिसे आप चाहते हैं? ध्यान दें कि उस स्क्रीनशॉट में, तीर वर्ग के बीच में नहीं है! –

+0

हां एंकर घटक का स्थान सोचा। आप इसे बनाने के लिए 2 ड्रॉ करते हैं, पहले आयताकार निर्दिष्ट स्थान में तीर। –

0

बारे में संवाद

3 विकल्प:

  1. त्रिकोण ड्राइंग के बारे में (वास्तव में, मुझे लगता है कि यह विकर्ण द्वारा विभाजित गोलाकार कोनों के साथ एक वर्ग है)। मैं बड़े वर्ग (संवाद के कंटेनर) के पीछे और दूसरा एक त्रिकोण (एक छवि का उपयोग कर) होगा। इसमें पारदर्शिता के साथ कुछ समस्याएं होंगी क्योंकि त्रिकोण आंशिक रूप से वर्ग को ओवरलैप करेगा। तो शायद त्रिभुज पारदर्शी नहीं होगा।

  2. एक और विकल्प, एक कस्टम व्यू का उपयोग करेगा। मैंने कभी कोशिश नहीं की है, लेकिन मुझे लगता है कि आप अंक का एक सेट निर्दिष्ट कर सकते हैं और उन्हें सफेद फ्रेम बनाने के लिए स्ट्रोक कर सकते हैं। अंदर पारदर्शिता (आसान) के साथ एक चित्रित आयताकार हो सकता है। आपके चित्रकार ऑब्जेक्ट (जिसे आप पाठ, रेखाएं, आयतों को आकर्षित करने के लिए उपयोग करते हैं) के साथ छाया खींचने के लिए कुछ है लेकिन मेरा मानना ​​है कि यह मैन्युअल ड्राइंग फ़ंक्शन का उपयोग करके प्राप्त करने के लिए सबसे जटिल बात होगी।

  3. स्रोत का उपयोग करें! (दूसरे शब्दों में, एंड्रॉइड खुला है ...देखते हैं कि कैसे वे यह स्रोत कोड में क्या किया)

देखने की चौड़ाई के बारे में:

जब आप मूल्य प्राप्त करने की कोशिश करते हैं? यदि आप इसे क्रिएट विधि में करते हैं, तो यह काम नहीं करना चाहिए। ऐसा करें जब उपयोगकर्ता बटन पर क्लिक करता है। यदि आप पहले से ही ऐसा कर रहे हैं, तो मैं आपकी मदद नहीं कर सकता। यह काम करना चाहिए। मैंने कई बार ऐसा किया है!

नि: शुल्क युक्ति: view.getLocationOnScreen का उपयोग करके view.getLeft (जो इसके माता-पिता से दूरी लौटाता है) के बजाय एक बेहतर विकल्प है।

0

यह शायद PathShape संरचनाओं का उपयोग करके हासिल किया गया है, या कम से कम किया जा सकता है। ShapeDrawable के साथ संयुक्त आप अपना खुद का "संवाद" नियंत्रण बना सकते हैं। उसी पथ का उपयोग करके, आप ड्राइंग Canvas के क्लिपिंग क्षेत्रों को परिभाषित कर सकते हैं। अंत में, ColorDrawable का उपयोग करके आप पारदर्शी रंग के साथ कैनवास भर सकते हैं।

संबंधित मुद्दे