web-dev-qa-db-fra.com

Comment changer la couleur de la police Spinner?

J'ai un problème avec les téléphones Droid X où les utilisateurs disent que la couleur de la police se révèle être blanche dans le spinner, la rendant invisible à moins que les utilisateurs ne mettent en surbrillance 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?

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);
22
JonF

Je vais utiliser Spinner exemple de projet de Android SDK pour les prochains exemples de code.


Code:

Tout d'abord, vous devez créer votre adaptateur personnalisé qui interceptera 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:

Comme CustomArrayAdapter sait que nous utilisons la ressource de mise en page intégrée d'Android, il sait également que le texte sera placé dans TextView avec l'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 en n'importe quelle couleur nécessaire.


Capture d'écran:

enter image description here

46
inazaruk

Simple et net ...

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) {
  }
};
7
Ashraf

é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);
7
Bhaskar
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 dans xml res/layout ajouter un nouveau fichier xml: type layout, spinner

(dans 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" />
3
noobProgrammer

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

2
Kumar Bibek

Vous pouvez également essayer cette approche dans laquelle vous ajoutez 2 nouveaux fichiers de ressources de mise en page

  1. Custom_spinner_list_item
  2. Custom_spinner_dropdown_item

et utilisez-les dans le code.

String spin_arry[] = new String[str_vec.size()];
str_vec.copyInto(spin_arry);
ArrayAdapter adapter =
    new ArrayAdapter(this,R.layout.custom_simple_spinner_item, spin_arry);
adapter.setDropDownViewResource(R.layout.custom_spinner_dropdown_item);

custom_spinner_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/text1"
    style="?attr/spinnerDropDownItemStyle"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:ellipsize="Marquee"
    Android:fontFamily="@font/roman"
    Android:singleLine="true"
    Android:textAlignment="inherit"
    Android:textColor="@color/black"
    Android:textSize="14sp">

</TextView>

custom_spinner_dropdown_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/text1"
    style="?attr/spinnerDropDownItemStyle"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/dropdownListPreferredItemHeight"
    Android:ellipsize="Marquee"
    Android:fontFamily="@font/roman"
    Android:singleLine="true"
    Android:textAlignment="textStart"
    Android:textColor="@color/black"
    Android:textSize="14sp">

</TextView>

Codage heureux !! :)

0
Haresh Raman