Quiero cambiar el color de la muestra el elemento seleccionado en mi spinner en Android (focalización a nivel de API de 16 y más). He intentado varias soluciones publicados aquí, incluyendo a crear un diseño personalizado para mi spinner elementos y utilizando un ColorStateList como el color del texto de la propiedad de la presentación personalizada, pero fue en vano. El control de giro se muestra en un semi-transparente de fondo – por lo tanto, el diseño personalizado para los elementos no funciona como se agrega un color para el control de giro. Actualmente mi hack solución es

if (_colorCodeSpinner.getSelectedView() != null) {
    ((TextView) _colorCodeSpinner.getSelectedView()).setTextColor(0xFFFFFFFF);
}

pero esto sólo funciona si la vista seleccionada no es null (que es en el cambio de orientación).

No me puedo creer que no hay una solución simple para establecer el color del texto. Parece que algo iba a menudo. El mismo con el cambio de color de la flecha, que me hacen actualmente por

_colorCodeSpinner.getBackground().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP);

Que me estoy perdiendo algo? ¿Cuál es la forma recomendada de cambiar los colores en la ruleta?

Establecer el color del texto en Android Spinner

Como se ve en la imagen, el color del texto del elemento seleccionado en la ruleta es el negro, pero quiero cambiarlo a ser de color blanco.

EDITAR

Para aclarar: no estoy buscando algún pequeño fragmento de código que reemplaza los valores en tiempo de ejecución (como los dos fragmentos que he publicado en esta pregunta). Estoy buscando una forma real de hacerlo correctamente (como en el XML de diseño o a través de los temas). Para establecer el color del texto de la propiedad una vez para no tener que actualizar cada vez que por ejemplo, seleccione un elemento.

InformationsquelleAutor Daniel | 2016-08-31

7 Comentarios

  1. 5

    Hacer esto :

      spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
          @Override
          public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
              ((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE); /* if you want your item to be white */
          }
    
          @Override
          public void onNothingSelected(AdapterView<?> parent) {
          }
      });
    • esto es impresionante el trabajo para mí, rebozado, a continuación, otras muchísimas Gracias @HugoHouyez
  2. 2

    Esto funcionará para usted

    public void onItemSelected(AdapterView<?> parent, View arg1, int arg2,
            long arg3) {
        //TODO Auto-generated method stub
    
        item = (String) parent.getItemAtPosition(arg2);
       ((TextView) parent.getChildAt(0)).setTextColor(0x00000000);
    
    
    
        }

    O

    puede utilizar el selector para cambiar de color

    crear un xml con nombre my_selctor.xml

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

    y en su vista del texto conjunto de esta manera

    <TextView ...........
       android:textColor=""@drawable/my_selctor"/>
  3. 2

    declarar ArrayAdapter como esta y la puso a su spinner:

    ArrayAdapter<String> adapter_state = new ArrayAdapter<String>(this,
                                R.layout.simple_spinner_dropdown_item, your_strings);
    adapter_state.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
    _colorCodeSpinner.setAdapter(adapter_state);

    y diseño de archivo xml simple_spinner_dropdown_item.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:gravity="left"
        android:textColor="#AAA"
        android:padding="5dp"
        />

    este trabajo para mí

  4. 1

    tratar el siguiente código:-

    XML:-

       <Spinner
            android:id="@+id/spinner"
            android:layout_width="match_parent"
            android:layout_margin="20dp"
            android:popupBackground="#ffffff"
            android:layout_height="match_parent">
    
        </Spinner>

    crear un otro xml para el textview

    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="dshsgv"
    android:padding="5dp"
    android:textColor="#000000">
    
    </TextView>

    a continuación, en su actividad:-

    public class MainActivity extends AppCompatActivity {
    Spinner spinner;
    String[] cat = {"Automobile", "Automobile"};
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner = (Spinner) findViewById(R.id.spinner);
        ArrayAdapter<String> adpter = new ArrayAdapter<String>     (MainActivity.this, R.layout.text, cat);
        spinner.setAdapter(adpter);
     }
     }
  5. 1

    Puede conseguir esta edición styles.xml el archivo de diseño. Para esta respuesta yo uso un nuevo proyecto en Android Studio, con minSdkVersion 16 y AppCompatSpinner.

    styles.xml diseño:

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    
        <item name="android:spinnerItemStyle">@style/mySpinnerItemSelectedStyle</item>
    </style>
    
    <style name="mySpinnerItemSelectedStyle" parent="@android:style/Widget.Holo.TextView.SpinnerItem">
        <item name="android:textColor">@color/spinnerTextColor</item>
    </style>

    Y agregar esta en colors.xml archivo:

    <color name="spinnerTextColor">#ffffff</color>

    La solución fue tomada desde el enlace de más abajo. Aunque es utilizado para el color spinner de elementos de lista desplegable, en su mayoría es el mismo enfoque.

    https://stackoverflow.com/a/22207394/6514926

  6. 0

    siga este enlace

    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(12);
    
        }
    
        public void onNothingSelected(AdapterView<?> parent) {
    
        }
    };
  7. 0

    Puede utilizar como este. Esto va a cambiar su icono de DropDown menú.

    spinner.getBackground().setColorFilter(Color.parseColor("#FFFFFF"), PorterDuff.Mode.SRC_ATOP);

    a continuación, hacer una TextView nombre de la presentación con spinner_text.xml como este

    <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/spinnerText"
    style="?android:attr/spinnerDropDownItemStyle"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:ellipsize="marquee"
    android:textColor="#fff" />

    y escribir este código en tu MainActivity.java clase como

     List<String> categories = new ArrayList<String>();
        categories.add("Automobile");
        categories.add("Business Services");
        categories.add("Computers");
        categories.add("Education");
        categories.add("Personal");
        categories.add("Travel");
    
        ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.spinner_text, categories);
        spinner.setAdapter(adapter);
        spinner.getBackground().setColorFilter(ContextCompat.getColor(this,R.color.white), PorterDuff.Mode.SRC_ATOP);
        //attaching data adapter to spinner
        spinner.setAdapter(adapter); 

Dejar respuesta

Please enter your comment!
Please enter your name here