2011-05-28 17 views
65

我試圖從下拉列表中選擇一個項目後,更改顯示在微調按鈕中的單個項目的文本顏色。我一直在仔細閱讀Android SDK中的themes.xml和styles.xml一個小時,我似乎無法找到Spinner從哪裏獲取顏色值。Android:Spinner窗口小部件的文本顏色屬性隱藏在哪裏?

爲了澄清,我沒有試圖更改下拉項目的顏色,我試圖在沒有下拉菜單時更改微調器顯示文本的顏色。我想你可以稱它爲微調器的'按鈕'文本。

+1

有一個顏色和背景的文本在微調。你可以在SpinnerAdapter.getView()中設置它。 – 2012-03-03 00:47:53

回答

96

我認爲它可能是該位在styles.xml

<style name="Widget.TextView.SpinnerItem"> 
    <item name="android:textAppearance">@style/TextAppearance.Widget.TextView.SpinnerItem</item> 
</style> 
<style name="Widget.DropDownItem.Spinner"> 
    <item name="android:checkMark">?android:attr/listChoiceIndicatorSingle</item> 
</style> 

- =編輯= - 這裏的結果: enter image description here

,這裏是它是如何做:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="MooTheme" parent="android:Theme"> 
     <item name="android:spinnerItemStyle">@style/MooSpinnerItem</item> 
    </style> 

    <style name="MooSpinnerItem" parent="android:Widget.TextView.SpinnerItem"> 
     <item name="android:textAppearance">@style/MooTextAppearanceSpinnerItem</item> 
    </style> 

    <style name="MooTextAppearanceSpinnerItem" parent="android:TextAppearance.Widget.TextView.SpinnerItem"> 
     <item name="android:textColor">#F00</item> 
    </style> 
</resources> 

然後,只需在你的AndroidManifest.xml中添加此到應用程序標籤

android:theme="@style/MooTheme" 
+0

這適用於下拉菜單中的微調項目。我需要它用於實際微調器中的文本。 – 2011-05-28 02:06:45

+0

這是實際的微調。我正在編輯我的答案,全面實施。 – CaseyB 2011-05-28 02:23:23

+1

我不明白,因爲這表示它是針對微調項目的。它如何應用於微調?我發現它確實有用,所以我會將你的標記作爲答案,但我真的很好奇它是如何實際工作的,因爲我正在查看Spinner代碼以查看文本顯示的位置,並且位於找不到它。 – 2011-05-28 02:30:31

1

我不認爲有與文本相關的顏色。它最有可能在android代碼中預定義,如果你想改變微調器的顏色,可能只需要自己製作。

這將包括更改ondraw()方法,並繪製微調器如何讓它看起來。

我認爲唯一可能的是潛在解決這個問題是微調框的樣式屬性。

來源:http://developer.android.com/reference/android/widget/Spinner.html

這可能幫助:

http://www.designerandroid.com/?p=28

+0

那麼,我認爲它是在某種風格的原因是因爲當我從全息變爲全息.Light主題時,旋轉器上的文本顏色從白色變爲黑色。 – 2011-05-28 01:36:37

+0

那麼你可以定義自己的風格,然後將其應用於微調,對吧? – JoxTraex 2011-05-28 01:38:06

+1

我可以,但我不知道爲文本顏色重寫什麼屬性,因此我的問題。 – 2011-05-28 01:49:07

26

您可以微調對象使用setOnItemSelectedListener,

spinnerObject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
     ((TextView)parentView.getChildAt(0)).setTextColor(Color.rgb(249, 249, 249)); 
     // OR ((TextView)parentView.getChildAt(0)).setTextColor(Color.RED); 
    } 
}); 
+1

這是這裏最簡單的方法:) – 2013-03-07 02:24:21

+0

我發現我必須檢查,父母有孩子第一,否則有一個NullPointerException引發每當我改變設備的方向。 – 2014-08-13 08:34:37

+0

如果只爲這一個微調器設置顏色,而不是全局設置,這可能是最佳解決方案 – bkurzius 2015-03-02 22:06:15

48

是的,CaseyB是正確的。

下面是如何設置的微調文字的顏色,一點簡單的例子:在你的清單

styles.xml

<style name="Theme.NoTitleBar.WithColoredSpinners" parent="@android:style/Theme.NoTitleBar"> 
     <item name="android:spinnerItemStyle">@style/SpinnerItem</item> 
     <item name="android:spinnerDropDownItemStyle">@style/SpinnerItem.DropDownItem</item> 
    </style> 

    <style name="SpinnerItem" parent="@android:style/Widget.TextView.SpinnerItem"> 
     <item name="android:textColor">#00FF00</item> 
    </style> 

    <style name="SpinnerItem.DropDownItem" parent="@android:style/Widget.DropDownItem.Spinner"> 
     <item name="android:textColor">#FF0000</item> 
    </style> 

</resources> 

然後:

<application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.NoTitleBar.WithColoredSpinners" > 

在外面的文本你所有的紡紗廠現在都是綠色的,下拉菜單上的文字會變成紅色。

+0

Thamk's dude ....它對我來說是完美的工作........ – Kalpesh 2012-04-19 05:52:01

+0

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

26

我這樣做是使用另一種簡單的技術,

副本在Android RES /佈局文件夾中的simple_spinner_item.xml和simple_spinner_dropdown_item.xml並在您的項目複製它們。

然後修改以下各行

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, Android.R.layout.simple_spinner_item); 
adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item); 
spinnerSubject.setAdapter(adapter); 

爲:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, R.layout.simple_spinner_item); 
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item); 
spinnerSubject.setAdapter(adapter); 

其餘的是容易的,你現在可以編輯simple_spinner_item.xml編輯一個可見項目的appearence微調器插件,然後編輯simple_spinner_dropdown_item.xml以更改下拉列表的外觀。

例如, 我的活動佈局包含:

<Spinner 
android:id="@+id/mo_spinnerSubject" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_marginTop="5dp" 
android:background="@drawable/spinnerset_background" /> 

和我simple_spinner_item.xml現在包含:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/text1" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:singleLine="true" 
android:textColor="@color/custom_white" 
android:textSize="16sp" /> 

和simple_spinner_dropdown_item.xml樣子:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/text1" 
style="?android:attr/spinnerDropDownItemStyle" 
android:layout_width="match_parent" 
android:layout_height="?android:attr/listPreferredItemHeight" 
android:background="@color/custom_black" 
android:ellipsize="marquee" 
android:singleLine="true" 
android:textColor="@color/custom_white" /> 
+2

不錯的例子。我無法讓其他人在我的項目中工作,但這很容易,並且像魅力一樣工作。 – raider33 2013-10-29 02:11:57

+1

這也是一個解決方案,不像其他人那樣強制全新的風格。 – 2015-02-02 12:02:59

-1

這對我有用 c使用微調項目的自定義定義自己的佈局文件。

custom_spinner.xml: 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/txt_spinner" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:textSize="16sp" 
android:textColor="#ffffff" /> 

更改使用適配器

Spinner spinner= (Spinner) findViewById(R.id.spinner1); 
ArrayAdapter adapter = ArrayAdapter.createFromResource(this,R.array.by_loc_array,R.layout.txt_spinner); 
spinner.setAdapter(adapter); 
8

它非常簡單實際的微調項。我一直在尋找各地你只需要創建的風格和微調器設置

首先創建主題Style.xml

<style name="spinnerTheme" parent="android:Theme"> 
    <item name="android:textColor">@color/gray_dark</item> 
</style> 

然後在你的XML您設置您的微調添加此:

機器人:主題= 「@風格/ spinnerTheme

     <Spinner 
         android:id="@+id/spinner" 
         android:layout_width="match_parent" 
         android:layout_height="50dp" 
         android:padding="10dp" 
         android:paddingBottom="5dp" 
         android:paddingLeft="10dp" 
         android:layout_span="3" 
         android:layout_weight="1.3" 
         android:theme="@style/spinnerTheme" 
         android:textSize="12sp" 
         android:spinnerMode="dialog" 
         android:clickable="false"/> 

享用編碼

+0

謝謝大家的贊成票。 :) – 2017-11-06 12:59:04

+0

優秀!我使用了@android:color/holo_orange_light – pollaris 2018-01-27 00:24:09

相關問題