2013-02-16 2 views
0

Je mets un fileur dans AlertDialog et de quelque façon les couleurs sont affichées différemment que dans l'activité normale. Cela me amène à ce problème:Comment changer le texte et la couleur d'arrière-plan?

android spinner

Quand j'ai que fileuse dans l'activité normale, la couleur du texte est de couleur noire et le fond de la liste déroulante est gris. Voici le contraire, la couleur de fond de la liste déroulante est noire et la couleur du texte est blanche. Ce serait aussi OK mais le problème est, comme vous pouvez le voir sur cette image, que le texte blanc est presque invisible sur ce fond gris.

J'ai essayé de définir un nouveau TextView et d'appliquer un nouvel adaptateur mais cela n'affecte que la couleur de la liste déroulante. Une fois l'élément sélectionné, le texte est toujours blanc.

spinner_text.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="wrap_content" 
    android:gravity="left" 
    android:textColor="@android:color/black"   
/> 

Adaptateur

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_text, values); 
spinner.setAdapter(adapter); 

Tout ce que je veux est la même apparence que ce serait si je mets un spinner dans la disposition qui est utilisée par l'activité.

Répondre

2

En raison de vous définir le thème de votre application. Vous devez implémenter votre classe d'adaptateur personnalisé et implémenter SpinnerAdapter pour cela.

est ici l'exemple pour ce

public class CusSpinnerAdapter extends ArrayAdapter<String> 
    implements SpinnerAdapter{ 
    private LayoutInflater inflate; 
    private int resourceId; 
    private String[] options; 
    private int selIndex; 
    private Context context; 

    public CusSpinnerAdapter(Context context, int textViewResourceId, 
      String[] objects) { 
     super(context, textViewResourceId, objects); 
     this.context = context; 
     this.inflate = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.resourceId = textViewResourceId; 
     this.options = objects; 
    } 
    public void setSelectedIndex(int selIndex){ 
     this.selIndex = selIndex; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if(convertView==null){ 
      convertView = inflate.inflate(resourceId, null); 
      Holder holder = new Holder(); 
      holder.textView = (TextView)convertView.findViewById(R.id.spinner_item); 
      convertView.setTag(holder); 
     } 
     Holder holder = (Holder)convertView.getTag(); 
     holder.textView.setText(options[position]); 

     return convertView; 
    } 
    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     if(convertView==null){ 
      convertView = inflate.inflate(resourceId, null); 
      Holder holder = new Holder(); 
      holder.textView = (TextView)convertView.findViewById(R.id.spinner_item); 
      convertView.setTag(holder); 
     } 
     Holder holder = (Holder)convertView.getTag(); 
     holder.textView.setText(options[position]); 
     if(position==selIndex){ 
      holder.textView.setBackgroundColor(context.getResources().getColor(R.color.spinner_item_selected)); 
     }else 
      holder.textView.setBackgroundColor(context.getResources().getColor(R.color.spinner_item_default)); 

     return convertView; 
    } 
    private class Holder{ 
     TextView textView; 
    } 
} 

Dans ce selIndex a été sélectionné élément d'index. Vous devez l'implémenter lorsque vous identifiez quel élément a été sélectionné et que vous avez défini l'élément drawable pour votre élément. Implémentez simplement sur l'élément sélectionné du contrôle spinner et à partir de celui qui définit la valeur d'index pour cette classe d'adaptateur.

Voici la autre façon aussi

https://stackoverflow.com/a/4662939/760489

+0

C'est tout. Je vous remercie. Cette partie avec une couleur différente pour l'élément sélectionné (selIndex) ne fonctionne pas pour moi. Il change de couleur uniquement pour le premier élément. – Cristiano

1

mettre ces lignes dans votre style

<style name="mytheme" parent="@android:style/Theme.Dialog"> 
    <item name="android:textColor">#000000</item> 
</style> 

puis dans ur fichier manifest inclure ce style comme ci-dessous

<activity 
     android:name="com.agencymodel.views.TempOrderActivity"   
     android:theme="@style/mytheme" > 
    </activity> 
Questions connexes