2012-06-06 21 views
13

मैं अपने पहले एंड्रॉइड ऐप के लिए थीम बनाने की कोशिश कर रहा हूं, और यह मुझे मोड़ के चारों ओर चला रहा है। अंत में मैं यह पता लगाने में कामयाब रहा कि ड्रॉपडाउन सूची में आइटम कैसे स्टाइल करें, लेकिन अब मैं सूची आइटम के बीच विभाजक का रंग नहीं बदल सकता। मैंने स्टैक ओवरफ्लो पर समान प्रश्नों की खोज की है, और कई संयोजनों की कोशिश की है, लेकिन कुछ भी काम नहीं करता है।एंड्रॉइड: शैली स्पिनर डिवाइडर नहीं कर सकता

यहाँ मेरी styles.xml फ़ाइल (स्पष्टता के लिए संक्षिप्त) है: कोई फर्क नहीं पड़ता कि मुझे क्या करना

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="MyTheme" parent="android:Theme.Light"> 
    <item name="android:spinnerStyle">@style/spinnerStyle</item> 
    <item name="android:spinnerDropDownItemStyle">@style/spinnerDropDownItemStyle</item>  
    <item name="android:dropDownListViewStyle">@style/spinnerListViewStyle</item> 
    </style> 

    <style name="spinnerStyle" parent="@android:style/Widget.Spinner"> 
     <item name="android:background">@drawable/my_theme_spinner</item> 
    </style> 

    <style name="spinnerDropDownItemStyle" parent="@android:style/Widget.DropDownItem.Spinner"> 
     <item name="android:background">@drawable/my_theme_spinner_item</item> 
     <item name="android:paddingLeft">5dp</item> 
     <item name="android:gravity">center_vertical</item> 
    </style> 

    <style name="spinnerListViewStyle" parent="@android:style/Widget.ListView.DropDown"> 
     <item name="android:height">3dp</item> 
     <item name="android:dividerHeight">3dp</item> 
     <item name="android:divider">@color/divider</item> 
    </style> 
</resources> 

, मैं सिर्फ आइटम के बीच 1DP हल्के भूरे रंग विभक्त (जो मुश्किल से मेरी हल्के रंग के साथ देखा जा सकता है मिल सूची आइटम पृष्ठभूमि) - न तो ऊंचाई और न ही विभाजक का रंग कभी प्रभावित होता है (मैंने इसे किसी भी प्रभाव के साथ भी खींचने की कोशिश की)। मैं क्या गलत कर रहा हूं?

उत्तर

25

मेरे पास स्पिनर के साथ एक बहुत ही सरल गतिविधि है और यह निम्न के लिए काम करता है। मुझे लगता है कि एकमात्र अंतर यह है कि आपके पास <item name="android:height">3dp</item> है और मेरे पास यह बिल्कुल नहीं है।

<style name="TestSpinnerStyle" parent="android:style/Widget.ListView.DropDown"> 
    <item name="android:divider">#ff0000</item> 
    <item name="android:dividerHeight">5dp</item> 
</style> 


<style name="SampleTheme" parent="@android:style/Theme.Holo.Light"> 
    <item name="android:dropDownListViewStyle">@style/TestSpinnerStyle</item> 
</style> 

और मेरी गतिविधि में मेरे पास है:

Spinner spinner = (Spinner) findViewById(R.id.spinner); 
    List<String> list = new ArrayList<String>(); 
    list.add("list 1"); 
    list.add("list 2"); 
    list.add("list 3"); 
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, list); 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
    spinner.setAdapter(dataAdapter); 

और फिर मुख्य लेआउट मैं निम्न XML के लिए:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
     > 
    <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Hello World, StylingActivity" 
      /> 
    <Spinner android:id="@+id/spinner" 
      android:layout_width="250dp" 
      android:layout_height="40dp" 
      /> 
</LinearLayout> 

यहाँ स्क्रीनशॉट है

sample activity screnshot

यदि आप इसे वहां से काम नहीं कर पा रहे हैं, तो मैं पूरी चीज़ को आपके लिए एक जिथब रेपो में धक्का दे सकता हूं।

+0

आपके उत्तर के लिए धन्यवाद - यह प्रोजेक्ट अभी चालू हो गया है और मेरे पास अभी आपके उदाहरण का परीक्षण करने के लिए समय नहीं है, लेकिन मैंने आपके जवाब को फिर भी घुमाया है, धन्यवाद। – Russ

+1

एफवाईआई: प्रश्न में स्पिनर ड्रॉपडाउन शैली में एंड्रॉइड से पहले @ है, जवाब नहीं है। – csga5000

1

आप अपने द्वारा उपयोग किए जाने वाले ड्रॉपडाउन लेआउट में एक क्षैतिज रेखा जोड़ सकते हैं, जो प्रभावी ढंग से विभाजक बना देगा।

संपादित

कुछ आगे इस पाया सर्च कर रहे हैं:

SO Answer

कौन सा मूल रूप से कहते हैं कि तुम क्या आप ऊपर करने के लिए काम करना चाहिए ... कोशिश कर रहे हैं, हालांकि यह है कि शैली की स्थापना का उल्लेख है आपकी गतिविधि विषय और आप ऐसा करने का उल्लेख नहीं करते हैं।

+0

उत्तर देने के लिए धन्यवाद। विषय जो मैंने ऊपर पोस्ट किया है वह गतिविधि विषय है, और विषय में अन्य तत्व गतिविधि में ठीक काम करते हैं। मैंने आइटम की पृष्ठभूमि के रूप में एक रेखा के साथ एक छवि का उपयोग करने के बारे में सोचा था, लेकिन मैं इसे बदनाम करने के बजाय चीजों को करने के लिए 'उचित' तरीका सीखना चाहता हूं। – Russ

+0

मैं भावना को समझ सकता हूं। :) दुर्भाग्य से, इस समय मेरे पास कोई बेहतर उत्तर/विचार नहीं है। – Barak

0

स्वीकार्य उत्तर में शैली विधि तब तक अच्छी तरह से काम करती है जब तक कि आपको अलग-अलग विभक्त रंगों के साथ दो स्पिनरों की आवश्यकता न हो।

यहाँ मैं एक विकल्प के रूप में काम करता है पाया है:

क) रंग आप विभक्त के लिए चाहते हैं कि स्पिनर पर popupBackgroundColor विशेषता सेट करें। यह पूरी सूची आइटम की पृष्ठभूमि को रंग देगा (जिसमें अंतरिक्ष हम विभाजक के रूप में सोचते हैं)।

बी) स्पिनर एडाप्टर ड्रॉप डाउन व्यू रिसोर्स को किसी अन्य रंग पर सेट की गई पृष्ठभूमि विशेषता के साथ चेकडटेक्स्ट व्यू सेट करें (या चयनकर्ता यदि आप चयनित आइटम को एक अलग रंग चाहते हैं) सेट करें। यह हमारे द्वारा चरण में सेट किए गए रंग को ओवरराइड करेगा लेकिन विभाजक के अलावा। हमें वांछित परिणाम प्रभावी ढंग से दे रहा है।

तो तुम होगा:

drawable/spinner_dropdown_background_selector:

<?xml version="1.0" encoding="utf-8"?> 

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@color/your_unchecked_color" android:state_checked="false"/> 
    <item android:drawable="@color/your_checked_color" android:state_checked="true"/> 
    <item android:drawable="@color/your_unchecked_color"/> 

</selector> 

लेआउट/drop_down_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@android:id/text1" 
      android:background="@drawable/spinner_dropdown_background_selector" 
      android:textColor="@android:color/white" 
      android:singleLine="true" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:ellipsize="marquee" /> 

आपका स्पिनर परिभाषा:

<Spinner 
     ... 
     android:popupBackground="@color/your_divider_color"    
     ... 
     /> 

और अंत में अपने सरणी एडाप्टर परिभाषा:

ArrayAdapter<String> dataAdapter = new ... 
dataAdapter.setDropDownViewResource(android.R.layout.drop_down_item); 
spinner.setAdapter(dataAdapter); 

कृपया ध्यान दें कि popupBackgroundColor की स्थापना कोई प्रभाव नहीं है अगर स्पिनर dialog mode में है।

1

आप अपने layout.xml में कर सकते हैं

 <Spinner 
       android:id="@+id/sp_to_create" 
       android:layout_width="match_parent" 
       android:layout_height="32dp" 
       android:layout_marginBottom="10dp" 
       style="@style/spinner_style" 
       android:prompt="@string/to_type_prompt" /> 

एक्सएमएल शैलियां जोड़ें यह

<style name="spinner_style" parent="Widget.AppCompat.ListView.DropDown"> 
    <item name="android:divider">#d1d1d1</item> 
    <item name="android:dividerHeight">0.5dp</item> 
</style> 

अपनी गतिविधि विषय में जोड़े

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
      <item name="android:dropDownListViewStyle">@style/spinner_style</item> 
</style> 

जावा FIL ई

your_spinnerList.setAdapter(new ArrayAdapter<>(getActivity(), android.R.layout.simple_dropdown_item_1line, timeOff_type_list)); 

मुझे बताएं कि यह आपके लिए उपयोगी था या नहीं! आपका दिन शुभ हो!