2010-12-05 8 views
22

J'ai un problème avec les téléphones Droid X où les utilisateurs disent que la couleur de la police s'avère être blanche dans le fileur, le rendant invisible à moins que les utilisateurs mettent en évidence les éléments. Aucun autre téléphone ne semble avoir ce problème. J'allais essayer de forcer la police à être noire pour voir si cela aide. Comment puis je faire ça?Comment changer la couleur de la police Spinner?

Voici comment je remplis actuellement le spinner. Il semble que le simple_spinner_item est cassé sur Droid X's.

String spin_arry[] = new String[str_vec.size()]; 
str_vec.copyInto(spin_arry); 
ArrayAdapter adapter = 
    new ArrayAdapter(this,android.R.layout.simple_spinner_item, spin_arry); 

Répondre

45

Je vais utiliser l'exemple de projet Spinner à partir d'Android SDK pour les exemples de code suivants.


code:

D'abord, vous devez vous créer un adaptateur personnalisée qui intercepte la création de vues dans la liste déroulante:

static class CustomArrayAdapter<T> extends ArrayAdapter<T> 
{ 
    public CustomArrayAdapter(Context ctx, T [] objects) 
    { 
     super(ctx, android.R.layout.simple_spinner_item, objects); 
    } 

    //other constructors 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) 
    { 
     View view = super.getView(position, convertView, parent); 

     //we know that simple_spinner_item has android.R.id.text1 TextView:   

     /* if(isDroidX) {*/ 
      TextView text = (TextView)view.findViewById(android.R.id.text1); 
      text.setTextColor(Color.RED);//choose your color :)   
     /*}*/ 

     return view; 

    } 
} 

Ensuite, vous créez un adaptateur dans votre code comme ceci:

String [] spin_arry = getResources().getStringArray(R.array.Planets);   
this.mAdapter = new CustomArrayAdapter<CharSequence>(this, spin_arry); 

Explication:

Parce que CustomArrayAdapter sait que nous utilisons la mise en page intégrée android ressource, il sait aussi que le texte sera placé dans TextView avec id android.R.id.text1. C'est pourquoi il peut intercepter la création de vues dans la liste déroulante et changer la couleur du texte à n'importe quelle couleur est nécessaire.


Screenshot:

enter image description here

+0

meilleure solution, modifier ce code: http://stackoverflow.com/questions/10409871/how-to-increase-spinner-item-font-size – Gerry

-1

faire votre propre fichier xml de mise en page, et donner un androïde: textColor = « # 000 » pour le texte noir

2

Pour ajouter à la réponse de Sasad, faites une copie de ce fichier, que vous pouvez trouver dans votre dossier Android, dans votre projet, modifiez la couleur du texte de TextView dans ce fichier et utilisez cette disposition lors de l'initialisation de l'adaptateur au lieu d'Android.

7

Simple et Crisp ...

private OnItemSelectedListener OnCatSpinnerCL = new AdapterView.OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> parent, View view, int pos, 
     long id) { 
    ((TextView) parent.getChildAt(0)).setTextColor(Color.BLUE); 
    ((TextView) parent.getChildAt(0)).setTextSize(5); 
    } 

    public void onNothingSelected(AdapterView<?> parent) { 
    } 
}; 
+0

Cela provoque le TextView être nul lorsque vous faites pivoter votre appareil. – tolgap

7

écrire un R.layout.simplespinneritem:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:singleLine="true" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

L'ID est android:id="@android:id/text1", définissez la couleur de la police et de l'arrière-plan.

ArrayAdapter adapter = 
    new ArrayAdapter(this,packagename.R.layout.simple_spinner_item, spin_arry); 
+1

Comment l'utilisez-vous si les éléments du spinner sont chargés depuis en utilisant l'attribut entries? – TheRealChx101

3
public class ee extends Activity{ 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.ww); 
addListenerOnSpinnerItemSelection(); 

} 
public void addListenerOnSpinnerItemSelection(){ 

    ArrayList<String> array = new ArrayList<String>(); 
    array.add("item0"); 
    Spinner spinner1; 
    ArrayAdapter<String> mAdapter; 
    spinner1= (Spinner) findViewById(R.id.spinner2); 
    spinner1= new ArrayAdapter<String>(this, R.layout.spinner_item, array); 
    spinner1.setAdapter(mAdapter); 

} 
} 

et res xml/layout ajouter nouveau fichier xml: mise en page de type, spinner

(en spinner_item.xml)

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="top" 
    android:singleLine="true" 
    android:textColor="#00f0ff" /> 
-1

Voici les gars façon plus appropriée,

d'abord trouver le fichier "simple_spinner_item.xml" dans votre système, Suivez le chemin ci-dessous, C: \ Users [nom d'utilisateur] \ AppData \ local \ Android \ plates-formes sdk \ de [android-23] \ data \ res \ layout

maintenant copiez le contenu du fichier "simple_spinner_item.xml"

Second créer le custom_spinner.xm fichier l dans votre résolution de projet \ layout dossier

et coller le contenu copié dans le fichier récemment créé

Voici l'exemple:

res \ layout \ custom_spinner.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView android:textAlignment="inherit" 
    android:ellipsize="marquee" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:singleLine="true" 
    android:textColor="@color/dark_gray" 
    style="?android:attr/spinnerItemStyle" 
    android:id="@android:id/text1" xmlns:android="http://schemas.android.com/apk/res/android"/> 

ici est le code de l'adaptateur:

Spinner ddlArea = (Spinner) findViewById(R.id.ddlArea); 

ddlArea.setAdapter(new ArrayAdapter<String>(this, R.layout.custom_spinner, areaList)); 

Où areaList est la liste

Merci, Ejaz Waquif

+0

Ceci n'est pas une réponse à la question –

Questions connexes