2011-12-23 17 views
19

मेरे पास एक कस्टम एंड्रॉइड व्यू है जो 'बटन' बढ़ाता है और एक बहु-स्तरीय स्पिनर के रूप में कार्य करता है - जब इसे दबाया जाता है तो यह स्पिनर-जैसे संवादों की एक श्रृंखला प्रदर्शित करता है जो उपयोगकर्ता को परिशोधित करने की अनुमति देता है उनका चयन इस मामले में, यह उपयोगकर्ता को दिन, फिर घंटे, फिर मिनट (5 मिनट अंतराल में) चुनने की अनुमति देता है कि वे एक पिकअप होने के लिए चाहते हैं। जब संवाद सक्रिय नहीं होता है, तो वर्तमान चयन का एक टेक्स्ट विवरण बटन पर दिखाया जाता है।एंड्रॉइड: स्पिनर के रूप में एक बटन खींचना

मैं दृश्यात्मक रूप से इंगित करना चाहता हूं कि उपयोगकर्ता बटन दबाकर चयन बदल सकता है, और सोच सकता है कि स्पिनर का रूप बिल्कुल वही है जो मुझे इसके लिए चाहिए। मैं डिवाइस पर अन्य स्पिनरों के समान दिखना चाहता हूं, और बटन पर आसानी से पाठ को बदलने में सक्षम हूं, लेकिन मुझे यकीन नहीं है कि बिना इसे प्राप्त किए बिना इसे कैसे प्राप्त किया जाए। मुझे स्पिनर जैसी आइकन के रूप में बटन प्रदर्शित करने के बारे में कैसे जाना चाहिए जो डिवाइस पर अन्य स्पिनरों के अनुरूप है?

उत्तर

7

मुझे अपने प्रश्न का समाधान मिला। मेरे बटन के लिए कन्स्ट्रक्टर में मैंने बैकग्राउंड ड्रॉइंग संसाधन को "btn_dropdown" होने के लिए सेट किया है।

public DateAndTimePicker(Context context) { 
    super(context); 
    this.setBackgroundResource(android.R.drawable.btn_dropdown); 
} 

यह स्पिनर बटन के समान दिखता है, बटन व्यवहार में से कोई भी बदल नहीं गया है, और बटन टेक्स्ट सही ढंग से केंद्रित है।

1

आप एंड्रॉइड को परिभाषित कर सकते हैं: स्पिनर की तरह दिखने वाले ड्रॉबल का उपयोग करने के लिए आपके बटन पर पृष्ठभूमि विशेषता। मैं स्पिनर के लिए एक 9-पैच छवि बनाने, मेरे रेस/drawable फ़ोल्डर में डाल, और उसके बाद अपने कस्टम स्पिनर बटन के लिए एक शैली जोड़कर ऐसा किया: अपने बटन के लिए

<style name="DialogSpinner"> 
    <item name="android:background">@drawable/dlg_spinner_background</item> 
    <item name="android:textColor">#919090</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:layout_width">wrap_content</item> 
    <item name="android:layout_marginTop">2px</item> 
    <item name="android:layout_marginBottom">2px</item> 
</style> 

, करने के लिए शैली विशेषता जोड़ने आपके लेआउट के लिए एक्सएमएल लेआउट:

<Button 
    android:id="@+id/okButton" 
    style="@style/DialogSpinner" 
    android:textColor="#a6a2a2" 
    android:text="something" 
/> 
3

यह एक्सएमएल लेआउट एक बटन को स्पिनर की तरह दिखता है।

<Button 
    android:id="@+id/my_button" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="12dp" 
    android:gravity="center_vertical|left" 
    android:enabled="true" 
    android:text="@string/my_button_text" 
    android:textColor="@color/my_button_color" 
    style="@style/MyButton" /> 

यह मेरा res/values ​​/ styles.xml का हिस्सा है::

<!-- **** Button styled to look like a spinner **** --> 
    <Button 
     android:id="@+id/btn_category" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@android:drawable/btn_dropdown" 
     android:gravity="center_vertical|left" 
     android:textSize="18sp" /> 
+1

जोनाथन लिन के शैली = "एंड्रॉयड: attr/spinnerStyle" 4.0+ – moberme

3

यह एक स्पिनर की तरह बटन ड्राइंग के अपने समाधान है

<style name="MyButton" parent="@android:style/Widget.Spinner"> 
</style> 

इस का हिस्सा है मेरी res/values-v14/styles.xml:

<style name="MyButton" parent="@android:style/Widget.DeviceDefault.Light.Spinner"> 
</style> 
+0

के लिए बेहतर मैं भी अन्यथा पाठ के शीर्ष पर प्रकट होता में res/values ​​/ styles.xml एक के लिए 48dp सही गद्दी जोड़ने के लिए किया था लग रहा है ड्रॉपडाउन प्रतीक। – aleb

47

यह है मैं एक स्पिनर की तरह स्टाइल करने वाला एक बटन कैसे आकर्षित करता हूं:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Button" 
    android:id="@+id/button" 
    style="?android:attr/spinnerStyle" /> 

यही है!

अद्यतन

निम्नलिखित की तरह कुछ भी काम करना चाहिए:

<style name="SpinnerButtonStyle" parent="android:Widget.Holo.Spinner"> 
    <item name="android:textColor">@color/entry_field</item> 
    <item name="android:textAppearance">?android:attr/textAppearanceMedium</item> 
</style> 

अधिक शैलियों के लिए एसडीके, उदा पर नज़र sdk/platforms/android-18/data/res/values/styles.xml

+6

2.1, 2.3, 4.0+ के लिए काम करता है। – aleb

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