2012-04-25 23 views
12

एंड्रॉइड 2.3.3 के लिए ड्रॉपडाउन स्पिनर बनाने का कोई तरीका है? मैं एक्शनबार शेरलॉक का उपयोग कर रहा हूं।एक्शनबार के बाहर ड्रॉपडाउन स्पिनर? (आइसक्रीम सैंडविच शैली, डब्ल्यू/एक्शनबारशेलॉक)

enter image description here

धन्यवाद

+0

ड्रॉपडाउन [स्पिनर] (http://developer.android.com/reference/android/widget/Spinner.html) के बारे में कैसे एपीआई 1 के आसपास रहा है? थीम अलग हो सकती हैं, लेकिन आप इसे अधिकांश कस्टम थीम में कॉपी करने में सक्षम होना चाहिए। – Sam

+0

उनका मतलब आईसीएस स्पिनरों का स्वरूप और अनुभव है, जहां वे एक संवाद होने के बजाय "ड्रॉप डाउन" करते हैं। – dmon

उत्तर

26

यह खड़ा के रूप में, आप भाग्यशाली हैं:

यहाँ मैं क्या मतलब का एक उदाहरण है। यह एक्शनबैरशेलॉक के साथ किया जा सकता है और यह संस्करण प्री-4.0 के साथ काम करता है। हालांकि, मुझे 100% यकीन नहीं है कि जेक व्हार्टन हमें इस तरह इसका उपयोग करना चाहेंगे, क्योंकि यह बिल्कुल "सार्वजनिक एपीआई" नहीं है, AFAIK (मुझे पूछना है)।

public class MyIcsSpinner extends IcsSpinner { 

    public MyIcsSpinner(Context context, AttributeSet attrs) { 
    super(context, attrs, com.actionbarsherlock.R.attr.actionDropDownStyle); 

    } 

    public MyIcsSpinner(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 

    } 
} 

एक लेआउट में शामिल करने के लिए:: वैसे भी, आप पहली बार ActionBarSherlock वर्ग से विस्तार करने के लिए अपने स्वयं के वर्ग बनाने के लिए

<com.blah.blah.blah.MyIcsSpinner 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center" 
    android:textAllCaps="true" 
    android:background="@drawable/abs__spinner_ab_holo_light" 
    android:textColor="#000000" 
    android:gravity="center"/> 

अब आप एक कस्टम SpinnerAdapter बनाने के लिए है, और आप की जरूरत है उचित दिखने और महसूस करने के लिए निम्न विधियों को ओवरराइड करने के लिए:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    final TextView filterName; 
    if (convertView == null) { 
     filterName = (TextView) layoutInflater.inflate(R.layout.filter_item, parent, false); 
    } else { 
     filterName = (TextView) convertView; 
    } 

    filterName.setText(getItem(position)); 
    return filterName; 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
    final TextView filterName; 
    if (convertView == null) { 
     filterName = (TextView) layoutInflater.inflate(R.layout.sherlock_spinner_dropdown_item, parent, false); 
     filterName.setEllipsize(TruncateAt.END); 
    } else { 
     filterName = (TextView) convertView; 
    } 

    filterName.setText(getItem(position)); 
    return filterName; 
    } 

वाईएमएमवी, एसएसपी। विषयों के बारे में।

+0

धन्यवाद, महान काम करता है! डिवाइस रोटेशन के बाद –

+0

@ डॉन ड्रॉपडाउन चौड़ाई नहीं बदला गया है। क्या आप इस पर सुझाव दे सकते हैं? –

1

मुझे एक ही समस्या मिली है और मेरा समाधान काफी सरल है। (मैंने HoloEverywhere का उपयोग नहीं किया।)

विचार एबीएस नमूना प्रोजेक्ट से आता है, जिसका ड्रॉप-डाउन मेनू प्री-4.0 उपकरणों पर भी उपमेनू का उपयोग करके प्रदर्शित किया जा सकता है। तो, मेरा विचार 3-डॉट आइकन छिपाने के लिए उपमेनू का उपयोग कर रहा है। कोड यह रहा:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    SubMenu sub = menu.addSubMenu("More"); 
    sub.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
    sub.getItem().setIcon(R.drawable.ic_menu); 

    getSupportMenuInflater().inflate(R.menu.activity_main, sub); 

    return true; 
} 

"अधिक" मेनू एक MenuItem.SHOW_AS_ACTION_WITH_TEXT विशेषता नहीं है के बाद से, इसलिए शब्द "अधिक" (या आप जो कुछ भी नामित) वास्तव में कार्रवाई बार पर प्रदर्शित नहीं किया जाएगा। केवल प्रदर्शित आइकन R.drawable.ic_menu को "abs__ic_menu_moreoverflow_normal_holo_dark.png" नामक एबीएस स्रोत कोड res/drawable-xxdpi फ़ोल्डरों से कॉपी किया जा सकता है, जो तथाकथित 3-बिंदु आइकन है। और R.menu.activity_main आपका मेनू xml है।

यह काम करता है!

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