web-dev-qa-db-fra.com

Changer la couleur du texte de l'élément sélectionné dans la liste déroulante

Comment puis-je changer la couleur de police de l'élément sélectionné dans un disque?

Je suis en mesure de changer la couleur de fond de l'élément sélectionné, la couleur de l'élément déroulant, etc., mais pas la couleur du texte de l'élément sélectionné ... comment puis-je le faire?

mon code est: c'est spinner que j'utilise--:

<Spinner
                Android:id="@+id/spinner1"
                Android:layout_width="wrap_content"
                Android:layout_height="32dip"
                Android:background="@drawable/mybg"
                Android:divider="@drawable/list_divider"
                Android:drawSelectorOnTop="true"
                Android:popupBackground="#D3D5D3"
                Android:Prompt="@string/activityy_Prompt" 
                />

c'est mybg.xml

<!-- <item Android:drawable="@drawable/blue" Android:state_pressed="false"/> -->
<!-- <item Android:drawable="@drawable/back11"/> -->

<item Android:drawable="@drawable/greenyellow1" Android:state_focused="true" Android:state_pressed="false"/>
<item Android:drawable="@drawable/greenyellow1" Android:state_focused="true" Android:state_pressed="true"/>
<item Android:drawable="@drawable/greenyellow1" Android:state_focused="false" Android:state_pressed="true"/>
<item Android:drawable="@drawable/greenyellow1" Android:state_selected="true"/>
<item Android:drawable="@drawable/back11"/>

en utilisant ceux-ci, je ne suis pas en mesure de changer la couleur du texte de l'élément sélectionné ...

26
amitkumar12788

drawable/mybg:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_activated="true">
        <color Android:color="@color/black" />
    </item>
</layer-list>

Cela modifiera la couleur de l'élément sélectionné dans la fenêtre contextuelle.

14
Sudheesh B Nair

Définissez OnItemSelectedListener comme ceci: 

  private AdapterView.OnItemSelectedListener listener = new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            ((TextView) parent.getChildAt(0)).setTextColor(0x00000000);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    };

puis définissez OnItemSelectedListener sur spinner comme ceci:

spinner.setOnItemSelectedListener(listener);
49
Priya

essayez d'implémenter onItemSelected dans votre OnItemSelectedListener pour changer la couleur du texte de l'élément sélectionné dans spinner

public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
    int index = adapterView.getSelectedItemPosition();
    ((TextView) spinner.getSelectedView()).setTextColor(getResources().getColor(R.color.Blue)); //<----
14
Er Swati Mittal

en utilisant le sélecteur comme couleur du texte.

créez color_selector.xml dans drawable comme 

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
     <item Android:state_pressed="true"
           Android:color="#000000" /> <!-- pressed -->
     <item Android:state_focused="true"
           Android:color="#000000" /> <!-- focused -->
     <item Android:color="#FFFFFF" /> <!-- default -->
 </selector>

et dans textview 

<TextView 
   Android:textColor="@drawable/color_selector"/>

Vous pouvez changer la couleur du texte sélectionné en ajoutant OnItemSelectedListener à la spinner

qtySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        ((TextView) view).setTextColor(Color.BLACK); //Change selected text color
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }
});
7
Jegan

il suffit d'utiliser cette ligne listner onItemSelected -

public void onItemSelected(AdapterView<?> parent, View arg1, int arg2,long arg3) 
     {

       item = (String) parent.getItemAtPosition(arg2);


       ((TextView) parent.getChildAt(0)).setTextColor(0x00000000);

 }
4
Yamini

Je sais que c'est une vieille question, mais j'avais un gros problème pour changer la couleur de l'élément sélectionné dans Spinner dans TabLayout et cela fonctionnait vraiment pour moi:

spinner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                ((TextView) spinner.getSelectedView()).setTextColor(Color.WHITE); //change to your color
            }
        });
2
Aleksandar Mironov

La définition de ((TextView) view).setTextColor(getResources().getColor(R.color.black)); dans onItemSelected(...) méthode d'écoute fonctionnera . Elle définit la couleur du texte sélectionné sélectionné.

2
Kavita_p

Vous n'avez pas besoin de code Java pour le changement de couleur de fond dans Android 2.3v. Ajoutez simplement Android:background="#F0F8FF" à votre spinner en fichier xml.

0
JyothiKanth

Si votre spinner utilise un ArrayAdapter, vous pouvez simplement passer une disposition personnalisée pour vos éléments spinner. Cette disposition peut être un simple textView mais avec l’attribut Android: textColor.

MainActivity.Java onCreate ()

adapter = new ArrayAdapter<>(this, R.layout.spinner_custom_textcolor, data);
spinner.setAdapter(adapter);

spinner_custom_textcolor.xml  

<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerItemStyle" 
Android:textColor="@color/YOUR_COLOR_HERE"
Android:singleLine="true"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:ellipsize="Marquee"
Android:textAlignment="inherit"/>

* Tout ce qui précède, sauf pour Android: textColor est une copie directe de Android.R.layout.simple_spinner_item

0
Carvell Wakeman
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
      @Override
      public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
           ((TextView) adapterView.getChildAt(0)).setTextColor(Color.WHITE);
}
0
Pablo Cegarra

La solution qui a fonctionné pour moi a consisté à utiliser une variable CheckedTextView pour la vue des ressources déroulantes, puis à modifier la couleur de l'élément vérifié à l'aide d'un sélecteur de couleur.

spinner_dropdown_item.xml dans le dossier layout:

<?xml version="1.0" encoding="utf-8"?>

<!-- A `CheckedTextView` allows the color of the text to be changed when it is selected (checked). -->
<CheckedTextView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/spinner_item_textview"
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    Android:maxLines="1"
    Android:ellipsize="end"
    Android:paddingStart="20dp"
    Android:paddingEnd="20dp"
    Android:paddingTop="8dp"
    Android:paddingBottom="8dp"
    Android:textSize="18sp"
    Android:textColor="@color/spinner_color_selector"
    Android:background="@color/spinner_background" />

spinner_color_selector dans le dossier color:

<?xml version="1.0" encoding="utf-8"?>

<!-- Highlight the selected (checked) item when the spinner is open. -->
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <item Android:state_checked="true" Android:color="@color/white" />
    <item Android:color="@color/blue_100" />
</selector>

spinner_dropdown_item.xml doit être défini comme la DropDownResourceView pour la Adapter. Dans mon cas, j'utilise une variable ResourceArrayAdapter qui extrait des informations de plusieurs sources.

// Setup a `MatrixCursor` for the static entries.
String[] matrixCursorColumnNames = {DatabaseHelper._ID, DatabaseHelper.NAME};
MatrixCursor matrixCursor = new MatrixCursor(matrixCursorColumnNames);
matrixCursor.addRow(new Object[]{-2, getString(R.string.first_spinner_item)});
matrixCursor.addRow(new Object[]{-1, getString(R.string.second_spinner_item)});

// Get a `Cursor` with the list of additional items from the database.
Cursor cursor = DatabaseHelper.getCursor();

// Combine `matrixCursor` and `cursor`.
MergeCursor mergeCursor = new MergeCursor(new Cursor[]{matrixCursor, foldersCursor});

// Create a `ResourceCursorAdapter` for the spinner with `this` context.  `0` specifies no flags.;
ResourceCursorAdapter resourceCursorAdapter = new ResourceCursorAdapter(this, R.layout.spinner_item, mergeCursor, 0) {
    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        // Get a handle for the spinner item `TextView`.
        TextView spinnerItemTextView = (TextView) view.findViewById(R.id.spinner_item_textview);

        // Set the `TextView` to display the name.
        spinnerItemTextView.setText(cursor.getString(cursor.getColumnIndex(DatabaseHelper.NAME)));
    }
};

// Set the `ResourceCursorAdapter` drop drown view resource.
resourceCursorAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);

// Get a handle for the `Spinner`.
Spinner spinner = (Spinner) findViewById(R.id.spinner);

// Set the adapter for the folder `Spinner`.
spinner.setAdapter(resourceCursorAdapter);

Étant donné que ResourceCursorAdapter utilise la même bindView pour renseigner le compteur lorsque celui-ci est ouvert et fermé, l'ID de la TextView dans spinner_dropdown_item.xml et spinner_item.xml doit être identique.

spinner_item.xml dans le dossier layout:

<?xml version="1.0" encoding="utf-8"?>

<TextView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/spinner_item_textview"
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    Android:maxLines="1"
    Android:ellipsize="end"
    Android:paddingStart="10dp"
    Android:paddingEnd="10dp"
    Android:textSize="18sp"
    Android:textColor="@color/primaryTextColor" />
0
Soren Stoutner

certains d'entre vous qui utilisent MaterialBetterSpinner et relient vos mises en page, tout ce qui précède ne va pas aider, essayez ceci, espérons que cela vous aide:

public class MyAdapter extends ArrayAdapter<String> {      

        public MyAdapter(Context context, int textViewResourceId, List<String> objects) {
            super(context, textViewResourceId, objects);           

        }

        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            return getCustomView(position, convertView, parent);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            return getCustomView(position, convertView, parent);
        }

        public View getCustomView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final YourXMLBinding rowBinding = DataBindingUtil.inflate(inflater, R.layout.yourXML, parent,false);
            rowBinding.tv1.setText(mMy.getValues().get(position));
            if(position == mMy.getCurrentIndex()) {
                rowBinding.tv1.setTypeface(Typer.set(getContext()).getFont(Font.ROBOTO_BOLD));//change font
                rowBinding.tv1.setTextColor(ContextCompat.getColor(getContext(), R.color.yourColor));//change color
            }
            return rowBinding.getRoot();
        }
    }

yourXML est quelque chose comme ceci:

<?xml version="1.0" encoding="utf-8"?>
<layout>

    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal"
        Android:background="@color/colorBackgroundStart">
        <TextView
            Android:id="@+id/tv1"
            Android:layout_width="0dp"
            Android:layout_weight="0.7"
            Android:layout_height="30dp"
            Android:textColor="#fff"
            Android:textSize="16dp"
            Android:layout_marginTop="8dp"
            Android:layout_marginBottom="10dp"
            Android:layout_marginLeft="8dp"/>

</layout>

créer un spinner avec cet adaptateur et votre XML: 

final MyAdapter adapter = new MyAdapter(getContext(), R.layout.yourXML, s.getValues());

final MaterialBetterSpinner spinner = new MaterialBetterSpinner(getContext());
spinner.setAdapter(adapter);
0
batsheva

Voir ma réponse à une question similaire ici . Ma réponse est similaire à celle de Priya, à la différence près qu'elle définit correctement la couleur du texte de l'élément sélectionné par défaut (pour qu'il n'y ait pas de décalage avec la mauvaise couleur lorsque vous attendez que le minuteur sélectionne automatiquement l'élément par défaut, ce qui se produit lorsque l'interface écran).

0
Rock Lee