2012-06-06 34 views
13

我正在嘗試爲我的第一個Android應用創建一個主題,它正在讓我轉彎。我終於弄清楚如何在下拉列表中設置樣式,但現在我無法更改列表項之間的分隔線的顏色。我在stackoverflow上搜索了類似的問題,並嘗試了幾十個組合,但似乎沒有任何工作。Android:無法設計微調分隔線

這裏是(簡稱爲清楚)我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淺灰色分頻器(這勉強可以用彩色光我看到的列表項背景) - 分隔線的高度和顏色都不會受到影響(我也嘗試將其設置爲drawable,也沒有效果)。我究竟做錯了什麼?

回答

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

如果你不能從那裏得到它的工作,我可以把整個事情推到你的github回購。

+0

感謝您的回覆 - 該項目現在已經開始,現在我沒有時間來測試您的示例,但我仍然向上提示您的回覆,謝謝。 – Russ

+1

供參考: 該問題有一個@之前的android在微調下拉樣式,答案不。 – csga5000

1

您可以爲您使用的下拉布局添加一條水平線,這將有效地創建分隔線。

編輯

一些進一步搜索發現這一點:

SO Answer

這基本上說你展示你正在嘗試做上面應該工作...但它提到設置,風格你的活動主題,你不提這樣做。

+0

謝謝你的回覆。我在上面發佈的主題是活動主題,主題中的其他元素在活動中正常工作。我確實想過用一行圖像作爲該項目的背景,但我寧願學習「正確」的方式來做事情而不是欺騙它。 – Russ

+0

我可以理解這種情緒。 :)不幸的是,我目前沒有更好的答案/想法。 – Barak

0

被接受的答案中的樣式方法運作良好,直到您需要具有不同分隔線顏色的兩個旋鈕。

這裏是我發現的作品作爲一種替代方案:

一)把微調到你想要的分頻器的顏色popupBackgroundColor屬性。這會着色整個列表項目的背景(包括我們認爲的分隔符)。

b)將spinners適配器dropDownViewResource設置爲CheckedTextView,並將其背景屬性設置爲某種其他顏色(或選擇器,如果希望所選項目具有不同的顏色)。這將覆蓋我們在步驟a中爲除分隔符之外的所有設置設置的顏色。有效地給了我們期望的結果。

所以,你將有:

繪製/ 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" /> 

XML樣式添加它

<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> 

JAVA FIL E

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

讓我知道它是否對你有用!祝你今天愉快!