2010-07-08 48 views
7

我在我的佈局xml文件中創建了一個微調器,併爲此微調器設置了一個字符串數組。 如果我更改微調器的文本樣式,文本不會受到更改的影響。如何更改微調器的文本樣式?

我在googlegroups上看到spinner沒有文字,因此textstyle無法更改,我必須更改顯示在spinner中的textview樣式。但我該怎麼做。最好在我的xml文件中。

回答

13

當您創建支持微調器的適配器時,您可以爲微調器項目設置佈局。

spinner.setAdapter(new ArrayAdapter(this, R.id.some_text_view)); 

你可以按照你想要的樣式來設置some_text_view。

<TextView android:id="@+id/some_text_view" android:textStyle="bold" /> 
+0

並沒有可能性內做到這一點xml文件?如果我在xml中設置項目,我不需要自己設置ArrayAdapter ... – Janusz 2010-07-08 15:48:53

+1

如果您使用android:entries,那麼在內部它會創建一個ArrayAdapter,其中包含android.R.layout.simple_spinner_item作爲佈局,並且您不能更改該佈局,因爲它是android的內部。 – 2010-07-08 16:02:11

19

正如我的前任指定的那樣,您不能在Spinner組件所在的主XML佈局文件中執行此操作。

上面的答案很好,但是如果我們想要使用Google的最佳實踐,就像您知道的那樣......對所有內容使用樣式......您可以通過以下3個「簡單」步驟進行操作:

第1步:你需要你的佈局文件夾下的一個額外的文件與外觀的Spinner的項目:

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    android:id="@+id/textViewSpinnerItem" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    style="@style/SpinnerTextViewItem" 
    xmlns:android="http://schemas.android.com/apk/res/android" /> 

名稱此文件:spinner_item_text.xml

第2步:然後,當你有一個項目數組填充微調您的活動課:

adapter = new ArrayAdapter<CharSequence>(this, R.layout.spinner_item_text, items); 
spinner.setAdapter(adapter); 

注意,R.layout.spinner_item_text資源是你自己的研發的文件。

第3步:在您的values文件夾下,創建或使用(您可能已有一個)文件styles.xml。需要的樣式應該看起來像這樣:

<style name="SpinnerTextViewItem" parent="@android:style/Widget.TextView" > 
    <item name="android:textSize" >8dp</item> 
    <item name="android:textStyle" >bold</item> 
</style> 

就是這樣!

到目前爲止,它已經非常方便地將所有關於文本大小,樣式,顏色等等放在styles.xml文件中,因此很容易維護。

+1

向SpinnerTextViewItem添加' @android:style/TextAppearance.Holo.Widget.TextView.SpinnerItem'(或任何適合主題的風格)將確保字體顏色可見微調的背景。 – 2012-07-19 08:32:51

+0

不錯的實現,但實際上你可以用XML來完成。請參閱@Cyril REAL的答案:http://stackoverflow.com/a/8871505/293280 – 2014-01-16 22:00:17

+0

如果我只想對頂層元素進行操作,該怎麼辦? – 2015-03-16 05:10:02

9

實際上,您可以通過xml自定義微調器的文本。

在你自己的風格,定義:

<item name="android:spinnerItemStyle">@style/yourStyleForSpinnerItem</item> 

,也定義了這種風格:

<style name="yourStyleForSpinnerItem"> 

//stuff you want for the item style 

</style> 

當你在Java代碼中實例化微調的適配器,你可以使用默認的Android。 R.layout。simple_spinner_item

+0

這適用於我,並且比通過代碼而不是xml定義所有適配器要容易得多。 – 2013-04-17 08:36:07

+0

你能解釋一下嗎? 「物品」應該定義在哪裏?我可以在哪裏設置微調器的風格? – Adreamus 2013-04-25 19:28:08

+0

android:spinnerItemStyle是主題的屬性。此屬性是對微調項目樣式的引用。因此,如果您將此項目放到您用於應用程序的自定義主題中,它將被使用。主題是一種典型的存儲themes.xml作爲一些默認的Android主題的後裔的風格。要了解更多信息,請點擊此處:http://developer.android.com/guide/topics/ui/themes.html – Bhiefer 2013-04-26 10:01:26

12

通過XML只有

作爲後續@Cyril REAL的出色答卷,這裏是一個徹底的執行如何做到通過XML風格你紗廠如果您是通過填充你的微調android:entries

上述答案的工作,如果你通過代碼創建微調但如果你通過XML,即使用android:entries設置你的微調項,那麼你就可以調整文字大小和其他屬性與以下兩個主題設置:

在你RES /價值/ styles.xml

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

    <style name="AppBaseTheme" parent="android:Theme.Holo"> 
    </style> 

    <!-- Application theme. --> 
    <style name="AppTheme" parent="AppBaseTheme"> 

     <!-- For the resting Spinner style --> 
     <item name="android:spinnerItemStyle"> 
      @style/spinnerItemStyle 
     </item> 

     <!-- For each individual Spinner list item once clicked on --> 
     <item name="android:spinnerDropDownItemStyle"> 
      @style/spinnerDropDownItemStyle 
     </item> 

    </style> 

    <style name="spinnerItemStyle"> 
     <item name="android:padding">10dp</item> 
     <item name="android:textSize">20sp</item> 
     <item name="android:textColor">#FFFFFF</item> 
    </style> 

    <style name="spinnerDropDownItemStyle"> 
     <item name="android:padding">20dp</item> 
     <item name="android:textSize">30sp</item> 
     <item name="android:textColor">#FFFFFF</item> 
    </style> 

</resources> 
+0

對於AppCompat主題,只需刪除'android:'像這樣' @ style/mySpinnerItemStyle' – 2016-09-28 07:01:03

2

如果你不希望這樣的解決方法,有一個簡單的方法。您可以通過微調TextView的並改變其參數:

TextView tv = (TextView) spin.getSelectedView(); 
tv.setTypeface(Typeface.DEFAULT_BOLD); //to make text bold 
tv.setTypeface(Typeface.DEFAULT); //to make text normal 
0

如果你只想改變的微調彈出觀的背景下,調用這個方法:

spinner.setPopupBackgroundResource(R.color.pa_md_white);