Google

2016-01-18 14 views
6

से डिज़ाइन चश्मा वाले लोगों की तरह ड्रॉपडाउन बटन/स्पिनर मैं सोच रहा हूं कि मैं ड्रॉपडाउन बटन/मेनू कैसे कर सकता हूं जैसे कि हम Google से डिज़ाइन चश्मा में देख सकते हैं और छवि में, इसलिए सूची बटन को सही ढंग से झुकाएं। क्या मुझे R.layout.support_simple_spinner_dropdown_item के बजाय इसके लिए एक कस्टम लेआउट सेट करने की आवश्यकता है?Google

enter image description here

उत्तर

15

तकनीकी तौर पर यह सिर्फ एक स्पिनर है इस्तेमाल कर सकते हैं।

मैंने ऐप कॉम्पैक्ट का उपयोग करके, कस्टम ड्रॉबल्स के साथ काम करने और दृश्य की ऊंचाई संपत्ति के साथ काम करने वाले एक जैसा दिखने की कोशिश की, इस प्रकार यह 5.0 से पुराने संस्करणों के लिए पूरी तरह से काम नहीं कर सकता है।

<your.package.CustomSpinner 
    android:id="@+id/spinner" 
    style="@style/Widget.AppCompat.Spinner" 
    android:layout_margin="10dp" 
    android:layout_width="200dp" 
    android:dropDownWidth="200dp" 
    android:layout_height="?attr/dropdownListPreferredItemHeight" 
    android:dropDownVerticalOffset="?attr/dropdownListPreferredItemHeight" 
    android:background="@drawable/spinner_bg" 
    android:popupBackground="@android:color/white" 
    android:paddingRight="14dp" 
    android:stateListAnimator="@drawable/spinner_sla" 
    android:popupElevation="3dp" /> 

महत्वपूर्ण::

पहले हमें हमारे अपने लटकती गुणों के साथ Spinner निर्दिष्ट कर सकते हैं हम CustomSpinner class from this post उपयोग करते हैं, क्योंकि हम कॉलबैक की जरूरत है पता करने के लिए जब स्पिनर एक बंद (स्टाइल प्रयोजनों के लिए) को खोलता है।

फिर हम स्पिनर सेट करते हैं: हम अपनी शैलियों को लागू करने के लिए चयनित आइटम (नीचे परिभाषित लेआउट) के लिए कस्टम व्यू का उपयोग करते हैं, और ऐपकॉमपेट के डिफ़ॉल्ट R.layout.support_simple_spinner_dropdown_item, लेकिन हम स्टाइल को और समायोजित करने के लिए एक और लेआउट का उपयोग कर सकते हैं।

String[] data = {"Arial", "Calibri", "Helvetica", "Roboto", "Veranda"}; 

ArrayAdapter adapter = new ArrayAdapter<>(getContext(), R.layout.spinner_item_selected, data); 
adapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item); 

final CustomSpinner spinner = (CustomSpinner) view.findViewById(R.id.spinner); 
spinner.setAdapter(adapter); 
spinner.setSpinnerEventsListener(new CustomSpinner.OnSpinnerEventsListener() { 
    public void onSpinnerOpened() { 
     spinner.setSelected(true); 
    } 
    public void onSpinnerClosed() { 
     spinner.setSelected(false); 
    } 
}); 

और यहाँ spinner_item_selected.xml लेआउट:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    style="?attr/spinnerDropDownItemStyle" 
    android:singleLine="true" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/dropdownListPreferredItemHeight" 
    android:background="@drawable/abc_spinner_mtrl_am_alpha" 
    android:ellipsize="marquee" /> 

इसके अलावा हम ऊपर का इस्तेमाल किया ड्रॉएबल की जरूरत है: स्पिनर की पृष्ठभूमि के रूप में

spinner_bg.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:exitFadeDuration="@android:integer/config_mediumAnimTime"> 
    <item android:state_pressed="true" android:drawable="@android:color/white" /> 
    <item android:state_selected="true" android:drawable="@android:color/white" /> 
    <item> 
     <inset android:insetLeft="-1dp" android:insetRight="-1dp"> 
      <shape android:shape="rectangle"> 
       <stroke android:width="1dp" android:color="#cccccc" /> 
       <solid android:color="#f0f0f0" /> 
      </shape> 
     </inset> 
    </item> 
</selector> 

spinner_sla.xml चेतन करने के लिए स्पिनर की ऊंचाई:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true"> 
     <set> 
      <objectAnimator 
       android:duration="@android:integer/config_mediumAnimTime" 
       android:propertyName="translationZ" 
       android:valueTo="3dp" /> 
     </set> 
    </item> 
    <item android:state_selected="true"> 
     <set> 
      <objectAnimator 
       android:duration="@android:integer/config_shortAnimTime" 
       android:propertyName="translationZ" 
       android:valueTo="3dp" /> 
     </set> 
    </item> 
    <item> 
     <set> 
      <objectAnimator 
       android:duration="@android:integer/config_shortAnimTime" 
       android:propertyName="translationZ" 
       android:valueTo="0" /> 
     </set> 
    </item> 
</selector> 

यह हमें इस तरह एक परिणाम (बाएं ध्वस्त हो गई, सही खुला) देता है:

enter image description here

हम छवियों के साथ एक स्पिनर का उपयोग करना चाहते हैं, तो हम भी एक कस्टम लटकती को परिभाषित करने के लिए होगा आइटम दृश्य

0

आप कस्टम दृश्य और शैलियों के साथ एक PopupMenu http://developer.android.com/intl/es/reference/android/widget/PopupMenu.html

PopupMenu popup = new PopupMenu(context, view); 

for (Element e: elementsList) { 

    popup.getMenu().add(e.id).setTitle(e.title); 
} 

popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 

    public boolean onMenuItemClick(MenuItem item) { 

     return true; 
    } 
}); 

popup.show(); 
संबंधित मुद्दे