2013-05-19 17 views
8

Ho un filatore in una finestra di Holo tema e sto cercando di cambiare il colore del testo, perché è molto difficile da leggere:Cambia Holo filatore colore del testo

dialog spinner text colour

Ho guardato styles.xml Android , così come molte altre risposte, e credo che sto impostando correttamente lo stile personalizzato; ma non viene raccolto.

Questo è un estratto del file di layout finestra di dialogo in cui il filatore vive:

<Spinner 
     android:id="@+id/spn_Type" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:entries="@array/dose_type_options" 
     style="@style/DialogSpinner" /> 

e queste sono le voci relative a styles.xml nella cartella di valori-V14:

<style name="DialogSpinner" parent="@android:style/Widget.Holo.Spinner"> 
     <item name="android:spinnerItemStyle">@style/MySpinnerItem</item> 
</style> 

<style name="MySpinnerItem" parent="android:Widget.Holo.TextView.SpinnerItem"> 
    <item name="android:textAppearance">@style/MyTextAppearanceSpinnerItem</item> 
</style> 

<style name="MyTextAppearanceSpinnerItem" parent="android:TextAppearance.Holo.Widget.TextView.SpinnerItem"> 
    <item name="android:textColor">#FFF</item> 
</style> 

Il il dialogo stesso è forzato al tema oscuro di Holo usando:

<style name="FibroDialog" parent="@android:style/Theme.Holo.Dialog"> 

</style> 

Può chiunque ide nificare perché il testo del filatore non è bianco?

Ho esaminato altre soluzioni, che suggeriscono di cambiare il colore nel codice, ma questa app supporta 2.3. * Verso l'alto, quindi per quelle versioni non-holo il testo nero va bene, quindi proviamo a farlo per stili.

Grazie

aggiornato utilizzando risposta da Woda sotto

Il colore del testo del valore iniziale del filatore è ormai bianca, che va un lungo cammino per evidenziando che c'è un filatore lì per il utente:

dialog spinner text colour 2

Ma il colore del testo delle voci selezionabili è ancora nero. Suppongo che non sia un grosso problema, almeno l'esistenza della filatrice è stata affermata facendo diventare il testo iniziale bianco. Ma sarei interessato a sapere perché gli oggetti sono ancora neri e come cambiarli in bianco.

risposta

5

Hai provato ad accettare SpinnerItemStyle sul tuo tema? Quindi tutti gli Spinners nella tua App avranno lo stesso stile. Lo sto usando in questo modo e funziona:

theme.xml:

<style name="exampleTheme" parent="android:Theme.Holo.Light"> 
    <item name="android:spinnerItemStyle">@style/SpinnerItem_example</item> 
    ... 
</style> 

style.xml:

<style name="SpinnerItem_example" parent="android:TextAppearance.Widget.TextView.SpinnerItem"> 
     <item name="android:textColor">#000000</item> 
</style> 

Aggiornamento: Dando uno sguardo più in profondità gli stili. xml mi ha portato questo:

<style name="Widget.DropDownItem.Spinner"> 
     <item name="android:checkMark">?android:attr/listChoiceIndicatorSingle</item> 
</style> 

<style name="Widget.DropDownItem"> 
     <item name="android:textAppearance">@style/TextAppearance.Widget.DropDownItem</item> 
     <item name="android:paddingStart">@dimen/dropdownitem_text_padding_left</item> 
     <item name="android:paddingEnd">@dimen/dropdownitem_text_padding_right</item> 
     <item name="android:gravity">center_vertical</item> 
</style> 

Quindi è probabile Devi personalizzare il Widget.DropDownItem e accettarlo nel tuo tema.

... 
<item name="dropDownItemStyle">@android:style/Widget.DropDownItem</item> 
... 

Per personalizzare la mia applicazione, i seguenti due collegamenti mi hanno aiutato molto a comprendere la struttura delle diverse visualizzazioni. Questi due file fanno parte del codice sorgente di Android. Potrebbe essere utile anche a te.

+0

Grazie, Woda. Per ora è già abbastanza per me. Vedi i miei aggiornamenti sopra per quello che è successo. – DaveSav

+0

Ho aggiornato la mia risposta sopra. Sfortunatamente non ho il tempo di controllare esattamente il problema. – Woda

+0

No, non sembrava funzionare. Ma grazie per la risposta iniziale. – DaveSav

0

È possibile accedere alla TextView interna nel codice senza cambiare tutti gli stili. Ecco come ho gestito abilitare e disabilitare Spinners

Il .getSelectedView() non ha funzionato per me. Quindi ho ingannato lo Spinner per "mostrare" di essere disabilitato.

È necessario definire i propri colori per l'aspetto "disattivato".

Per esempio:

R.color.blue_text //means enabled 
R.color.gray_text //means disabled 

Quindi, per disattivare la mia filatore:

((TextView)mySpinner.getChildAt(0)).setTextColor(getResources().getColor(R.color.gray_text)); 
mySpinner.setEnabled(false); 
mySpinner.setFocusable(false); 

Per attivare la mia filatore:

((TextView)mySpinner.getChildAt(0)).setTextColor(getResources().getColor(R.color.blue_text)); 
mySpinner.setEnabled(true); 
mySpinner.setFocusable(true); 

Il getChildAt (0) funzione consente di accedere al primo elemento nella casella di selezione, che è ciò che viene visualizzato sullo schermo come TextView.

Non è necessario modificare gli stili o modificare alcun XML. Basta fare questo nel tuo codice, anche nei metodi degli eventi, dovresti stare bene.

1

ho riparato chiamando

mArrayAdapter.setDropDownViewTheme(mActivity.getTheme()); 

Spero che questo aiuti qualcuno;)

Problemi correlati