¿Cómo cambiar el tamaño del texto de la ruleta y el color del texto?

432

En mi aplicación de Android, estoy usando spinner, y he cargado datos de la base de datos SQLite en el spinner, y funciona correctamente. Aquí está el código para eso.

Spinner spinner = (Spinner) this.findViewById(R.id.spinner1);
List<String> list = new ArrayList<String>();
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>  (this,android.R.layout.simple_spinner_item, list);
cursor.moveToFirst();

list.add("All Lists");

if (cursor.getCount() > 0) {
    for (int i = 0; i < cursor.getCount(); i++) {
        keyList[i] = cursor.getString(cursor.getColumnIndex(AndroidOpenDbHelper.KEYWORD));
        list.add(keyList[i]);
        cursor.moveToNext();
    }
}
Database.close();
cursor.close();
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter);

Ahora quiero cambiar el color del texto y el tamaño del texto de los datos de la ruleta. He usado las siguientes líneas XML para mi etiqueta de ruleta en mi archivo XML, pero no funciona.

android:textColor="@android:color/white"
android:textSize="11dp"

¿Cómo puedo cambiar el color y el tamaño del texto de mi ruleta?

Dinesh Anuruddha
fuente
consulte los siguientes sitios [StackoverFlow] [1] [stackoverflow] [2] [stackoverflow] [3] Creo que esta es una pregunta duplicada [1]: stackoverflow.com/questions/4880413/… [2]: stackoverflow.com/questions / 4989817 /… [3]: stackoverflow.com/questions/5836254/…
usuario1203673
prueba esta publicación stackoverflow.com/questions/6159113/…
Ajay
1
Para textSize lo correcto es usar SP ... android: textSize = "11sp"
Diego Venâncio

Respuestas:

780

Haga un archivo XML personalizado para su elemento giratorio.

spinner_item.xml:

Dé su color y tamaño personalizado al texto en este archivo.

<?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="#FF0000"         
    android:padding="5dip"
    />

Ahora use este archivo para mostrar sus elementos de giro como:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item,list);

No necesita configurar el recurso desplegable. Solo tomará spinner_item.xmlmostrar sus artículos en spinner.

Hiral Vadodaria
fuente
2
El texto @Hiral será blanco solo para el elemento seleccionado actual.
tesla
8
@SANTHOSH bueno, tienes que agregar una identificación a TextView, solo agrega allí android:id="@+id/customSpinnerItemTextView". Si hubiera depurado esto, lo sabría.
vilpe89
3
@ vilpe89 ¿podría modificar su código anterior para mostrar lo que quiere decir con esto? ¿A dónde va este android: id? ciertamente no está en la etiqueta giratoria, porque tiene su propia identificación. pero no tiene sentido agregarlo en la etiqueta de vista de texto que creó anteriormente. ¿Cómo hago referencia a que quiero usar esta etiqueta directamente desde el XML? Además, al crear el XML desde Eclipse, no veo ninguna opción para crear un archivo XML que contenga solo un TextView, ¿cómo funciona?
Michael
29
Solo una pequeña nota. Textsize debería usar sp en lugar de dp / dip
ymerdrengene
18
¿No se puede hacer esto usando solo estilo? Estoy sorprendido de cómo las cosas pequeñas son tan difíciles de diseñar en Android ... esto es frustrante ... Desearía que tuvieran un sistema de estilo como CSS
síman, el
183

Simple y crujiente ...:

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) {

    }
};
Ashraf
fuente
19
Esta es la mejor solución para mí, porque necesitaba cambiar el color del texto en el control giratorio, pero no en la lista que aparece. Gracias.
peter.bartos
77
Para mí, el color del elemento parpadea, pasando del color original al color que elegí
Felipe Conde
@FelipeConde ¿Alguna vez encontró una respuesta? Tengo la misma pregunta. Mi pregunta está aquí: stackoverflow.com/questions/33908564/…
Rock Lee
@FelipieConde Para usted, toma el color de ascenso al principio, luego lo cambia a otro color manualmente, por lo que se ve tan cansado. Al principio se necesita <item name = "colorAccent"> @ color / color_primary </item> Luego cambiaste manualmente por programático, así que sientes el parpadeo
Ashraf
2
esto funcionó para mí, pero mi problema es cuando regreso de un bloque de aplicaciones fragmentado ya que obtiene un puntero nulo en el código anterior
Akshay Shah
145

Si todos los íconos giratorios pueden tener el mismo color de texto para sus elementos TextView, otro enfoque es usar un estilo personalizado para los elementos desplegables del ícono:

En res/values/styles.xml:

<resources>
    <style name="AppBaseTheme" parent="android:Theme.Light">
    </style>

    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:spinnerDropDownItemStyle">@style/mySpinnerItemStyle</item>
    </style>

    <style name="mySpinnerItemStyle" parent="@android:style/Widget.Holo.DropDownItem.Spinner">
        <item name="android:textColor">@color/my_spinner_text_color</item>
    </style>
</resources>

Y defina su color personalizado en res / values ​​/ colors.xml:

<color name="my_spinner_text_color">#808080</color>
Whypee
fuente
2
¿Y cómo aplicar esta solución al tema de Appcompt? Lo intente anulando el tema principal "@ style / Widget.AppCompat.DropDownItem.Spinner" y no funcionó
GyRo
11
También agregaría: <item name = "android: spinnerItemStyle"> @ style / mySpinnerItemStyle </item> Esto asegura que el texto contraído tenga el mismo color, en caso de que este sea el comportamiento deseado.
bucle infinito
44
tampoco funciona para mí, el estilo es completamente ignorado
diogo.abdalla
1
@Whypee, edita tu respuesta de acuerdo con las sugerencias de bucle infinito, funcionó perfectamente para mí
Chintan Desai
44
Para el tema AppCompat simplemente elimine de android:esta manera<item name="spinnerDropDownItemStyle">@style/mySpinnerItemStyle</item>
Roman_D
73

Aquí hay un enlace que puede ayudarlo a cambiar el color del Spinner :

haga clic aquí

<Spinner
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/spinner"
    android:textSize="20sp"
    android:entries="@array/planets"/>

Debe crear su propio archivo de diseño con una definición personalizada para el elemento giratorio spinner_item.xml :

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textColor="#ff0000" />

Si desea personalizar los elementos de la lista desplegable, deberá crear un nuevo archivo de diseño. spinner_dropdown_item.xml :

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerDropDownItemStyle"
    android:maxLines="1"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:ellipsize="marquee"
    android:textColor="#aa66cc"/>

Y finalmente otro cambio en la declaración de la ruleta:

ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
R.array.planets_array, R.layout.spinner_item);

adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
spinner.setAdapter(adapter);

Eso es.

Niib Fouda
fuente
2
Esta fue una respuesta automatizada que vino de revisar publicaciones de nuevos usuarios. ¡Me alegra ver que has editado la respuesta! :)
Marko
1
Parece que android:textSize="20sp"en el primer fragmento de código es inútil: el tamaño del texto del control se define en elspinner_item.xml
DenisGL
23

Si trabaja con android.support.v7.widget.AppCompatSpinner, aquí está la solución más simple y probada con estilos:

 <android.support.v7.widget.AppCompatSpinner
                    android:id="@+id/spefcialFx"
                    style="@style/Widget.AppCompat.Spinner.Underlined"
                    android:layout_width="200dp"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="4dp"
                    android:theme="@style/Spinner"
                    android:entries="@array/special_fx_arrays"
                    android:textSize="@dimen/text_size_normal"></android.support.v7.widget.AppCompatSpinner>

Y el estilo:

<style name="Spinner" parent="Widget.AppCompat.Light.DropDownItem.Spinner">
        <item name="android:paddingStart">0dp</item>
        <item name="android:paddingEnd">0dp</item>
        <item name="android:textColor">@color/white</item>
        <item name="android:backgroundTint">@color/red</item>
        <item name="android:textSize">14sp</item>
    </style>

El único inconveniente es Android: backgroundTint establece el color tanto para la flecha desplegable como para el fondo desplegable.

voytez
fuente
3
usas style="@style/Widget.AppCompat.Spinner.Underlined"pero solo tienes style name="Spinner"...
user25
1
paddingStartrequiere API 17, backgroundTintrequiere API 21.
CoolMind
18

Para evitar el retraso, no solo debe establecer las propiedades de texto en el onItemSelectedoyente, sino también en el onCreatemétodo de la Actividad (pero es un poco complicado).

Específicamente, debe poner esto onCreatedespués de configurar el adaptador:

spinner.setSelection(0, true);
View v = spinner.getSelectedView();
((TextView)v).setTextColor(backgroundColor);

Y luego pon esto en onItemSelected:

((TextView) view).setTextColor(backgroundColor);

Aquí hay un ejemplo completo:

@Override  
protected void onCreate(Bundle savedInstanceState)
{  
    Spinner spinner = (Spinner) findViewById(R.id.spinner); 

    //Set the choices on the spinner by setting the adapter.  
    spinner.setAdapter(new SpinnerAdapter(toolbar.getContext(), new String[]{"Overview", "Story", "Specifications", "Poll", "Video"}, accentColor, backgroundColor));

    //Set the text color of the Spinner's selected view (not a drop down list view) 
    spinner.setSelection(0, true);
    View v = spinner.getSelectedView();
    ((TextView)v).setTextColor(backgroundColor);

    //Set the listener for when each option is clicked.  
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
    {  

        @Override  
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
        {  
           //Change the selected item's text color  
           ((TextView) view).setTextColor(backgroundColor);
        }  

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

}  

Para más detalles, vea mi pregunta .

Rock Lee
fuente
15

Si desea que el color del texto cambie solo en el elemento seleccionado, esta puede ser una posible solución. Funcionó para mí y debería funcionar para usted también.

spinner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                ((TextView) spinner.getSelectedView()).setTextColor(Color.WHITE);
            }
        });
vishal-wadhwa
fuente
6

Para alguien que solo necesita un Stylecamino AppCompat.

Resultado
ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

styles.xml

<resources>
    ... 
    <style name="Spinner" parent="Widget.AppCompat.Light.DropDownItem.Spinner">
        <item name="android:paddingStart">0dp</item>
        <item name="android:paddingEnd">0dp</item>
        <item name="android:textColor">@color/material_grey_700</item>
        <item name="android:textSize">12sp</item>
    </style>
</resources>

your_spinner_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
    ...

    <android.support.v7.widget.AppCompatSpinner
        android:id="@+id/content_spinner"
        style="@style/Widget.AppCompat.Spinner.Underlined"
        android:layout_width="140dp"
        android:layout_height="wrap_content"
        android:entries="@array/shipping_tracking_carrier_names"
        android:spinnerMode="dropdown"
        android:theme="@style/Spinner" />

    <EditText
        android:id="@+id/content_input"
        android:layout_width="140dp"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:maxLines="1"
        android:paddingEnd="8dp"
        android:paddingStart="8dp"
        android:textColor="@color/material_grey_700"
        android:textSize="12sp" />

    ...
</LinearLayout>    

Además,
y si desea configurar mediante android:entriesprogramación con un estilo definido.
Prueba esto.

AppCompatSpinner spinner = findViewById(R.id.content_spinner);
CharSequence[] entries = getResources().getTextArray(R.array.shipping_tracking_carrier_names);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<>(spinner.getContext(), android.R.layout.simple_spinner_item, entries);
adapter.setDropDownViewResource(android.support.v7.appcompat.R.layout.support_simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

Como en el código, usar lo mismo Contextcon el Spinneres lo más importante.

spinner.getContext()
wonsuc
fuente
5

Para cambiar el color del texto de la ruleta:

 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            ((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE);}
Hanisha
fuente
Este es el más simple y funcionó para mí, ¡gracias!
Mousa Alfhaily
Me gusta esta solución también. Es simple y funciona bien.
korchix
4

En lugar de hacer un diseño personalizado para obtener un tamaño pequeño y si desea usar el DISEÑO interno de tamaño pequeño de Android para la ruleta, debe usar:

"android.R.layout.simple_gallery_item" en lugar de "android.R.layout.simple_spinner_item".

ArrayAdapter<CharSequence> madaptor = ArrayAdapter
            .createFromResource(rootView.getContext(),
                                R.array.String_visitor,
                                android.R.layout.simple_gallery_item);

Puede reducir el tamaño del diseño de la ruleta. Es solo un simple truco.

Si desea reducir el tamaño de una lista desplegable, use esto:

madaptor.setDropDownViewResource(android.R.layout.simple_gallery_item);
Hemant Shori
fuente
4

La forma más fácil de reutilizar / cambiar los recursos android.R.layout es ir a la definición. En Android Studio, haz Ctrl+ Ben android.R.layout.simple_spinner_item.xml.

Te llevará al archivo de recursos. Simplemente copie el archivo de recursos y agregue un nuevo diseño en su carpeta Package.R.layout y cambie el TextColor of textview como desee y luego simplemente instálelo en el adaptador de esta manera:

ArrayAdapter<String> adapter = new ArrayAdapter<String(Context,R.layout.spinner_item, spinnerlist);
ZygoteInit
fuente
4

Para aquellos que quieran cambiar de DrowDownIconcolor, pueden usarlo así

spinner.getBackground().setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.SRC_ATOP);
AMAN SINGH
fuente
¿Puedes probar<item name="android:colorControlNormal" tools:targetApi="lollipop">@color/light_gray</item>
AMAN SINGH
poner esta línea en su estiloAppTheme
AMAN SINGH
Este es el código que funcionóDrawable spinnerDrawable = spinner.getBackground().getConstantState().newDrawable(); spinnerDrawable.setColorFilter(getResources().getColor(R.color.md_white_1000), PorterDuff.Mode.SRC_ATOP); if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { spinner.setBackground(spinnerDrawable); }else{ spinner.setBackgroundDrawable(spinnerDrawable); }
Edijae Crusar
4

Puede cambiar el color del texto anulando el método getView de la siguiente manera:

 new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, list()){
                @Override
                public View getView(int position, View convertView, @NonNull ViewGroup parent) {
                    View view = super.getView(position, convertView, parent);
                    //change the color to which ever you want                    
                    ((CheckedTextView) view).setTextColor(Color.RED);
                    //change the size to which ever you want                    
                    ((CheckedTextView) view).setTextSize(5);
                    //for using sp values use setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
                    return view;
                }
    }
Madhur
fuente
3

Más simple: funciona para mí

TextView spinnerText = (TextView) spinner.getChildAt(0);

spinnerText.setTextColor(Color.RED);
Waqar Ahmed Shujrah
fuente
1
spinner.getChildAt (0) me devuelve nulo: /
Karl Heinz Brehme Arredondo
2
Creo que esta técnica es para API 19+.
Jose Manuel Abarca Rodríguez
2
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1"
    style="?android:attr/spinnerItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="#fff"
    android:ellipsize="marquee"
    android:textAlignment="inherit"/>

solo usa esto:

ArrayAdapter<String> adapter_category = new ArrayAdapter<String>(this,
    R.layout.spinner_list_item, categories);
adapter_category
    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
santosh
fuente
1

Otra variación de la solución de Ashraf sería asegurarse de tener en cuenta los tamaños de pantalla. Tendrá que activar el spinner en onCreate y configurar el oyente después de configurar el adaptador:

//set your adapter with default or custom spinner cell, then://
serverSpinner.setOnItemSelectedListener(spinnerSelector);
serverSpinner.setSelection(defaultServer);

Luego, puede comenzar a cambiar el tamaño del texto de la vista que se muestra antes de hacer clic en la ruleta:

private AdapterView.OnItemSelectedListener spinnerSelector = new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
        boolean largeTablet = getResources().getBoolean(R.bool.isLargeTablet);
        if (tabletSize) { ((TextView)parent.getChildAt(0)).setTextSize(16); }
        else if (largeTablet) { ((TextView)parent.getChildAt(0)).setTextSize(18); }
        else { ((TextView)parent.getChildAt(0)).setTextSize(12); }
    }
    public void onNothingSelected(AdapterView<?> parent) {

    }
};

Todo lo que necesita hacer es crear carpetas específicas de diseño como esta:

valores-sw360dp

valores-sw600dp

valores-sw800dp

y luego agregue un archivo xml llamado "bool.xml" en cada una de esas carpetas:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="isTablet">false</bool>
    <bool name="isLargeTablet">false</bool>
</resources>
whyoz
fuente
1

Primero tenemos que crear el xmlarchivo de recursos simple para textviewlo siguiente:

<?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="#FF0000"         
    android:padding="5dip"
    />   

y guárdalo. después de configurarlo en su lista de adaptadores.

Ishor Neupane
fuente
1

Puedes tener este tipo de adaptador para spinner, totalmente personalizado:

 ArrayAdapter<String> genderAdapter = new ArrayAdapter<String>(getActivity(), R.layout.spinner_text, genderList) {

        public View getView(int position, View convertView, ViewGroup parent) {
            View v = super.getView(position, convertView, parent);
            ((TextView) v).setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
            ((TextView) v).setTextColor(Color.parseColor("#676767"));
            ((TextView) v).setTypeface(vrFont);
            return v;
        }

        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            View v = super.getDropDownView(position, convertView, parent);
            ((TextView) v).setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
            ((TextView) v).setTypeface(vrFont);
            ((TextView) v).setTextColor(Color.parseColor("#676767"));

            if (position == 0) {
                ((TextView) v).setTextColor(Color.parseColor("#979797"));
            }

            return v;
        }

mientras R.layout.spinner_text es:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text1"
style="?android:attr/spinnerItemStyle"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:gravity="center_vertical|left"
android:ellipsize="marquee"
android:maxLines="1"
android:textColor="@color/whiteThree" />
blackHawk
fuente
1

Si desea un método simple, para agregar elementos a un menú desplegable, generalmente los agrega a strings.xml. Aquí hay un ejemplo sobre cómo agregar color usando el archivo strings.xml:

SELECCIONE RANGO DE EDAD

<string-array name="age_array">

   <item> 0-6 </item>                               //No custom colour

  <item><font fgcolor='#FF4CD964'> 12+ </font></item> //With custom colour

</string-array>
Jamie
fuente
truco lindo ... útil y rápido para un fuera de hilandero, necesidades de color para no ser una cadena de texto en valor de color a partir de XML
me_
0

He hecho esto de la siguiente manera: he usado los métodos getDropDownView () y getView ().

Uso getDropDownView()para Spinner abierto.

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
  View view = convertView;
  if (view == null) {
    LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = vi.inflate(R.layout.context_row_icon, null);
  }
  TextView mTitle = (TextView) view.findViewById(R.id.context_label);
  ImageView flag = (ImageView) view.findViewById(R.id.context_icon);                

  mTitle.setText(values[position].getLabel(activity));

  if (!((LabelItem) getItem(position)).isEnabled()) {
    mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled));
  } else {
    mTitle.setTextColor(activity.getResources().getColor(R.color.context_item));
  }
  return view;
}

Y uso getView()para Spinner cerrado.

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  View view = convertView;
  if (view == null) {
    LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = vi.inflate(R.layout.context_row_icon, null);
  }
  TextView mTitle = (TextView) view.findViewById(R.id.context_label);
  ImageView flag = (ImageView) view.findViewById(R.id.context_icon);

  mTitle.setText(values[position].getLabel(activity));
  mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled));

  return view;
}
Bhavinkumar Patel
fuente
Se probó correctamente el código y funcionó en la aplicación en la
tienda de
0

Prueba este método. Me esta funcionando.

@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
    TextView textView = (TextView) view;
    ((TextView) adapterView.getChildAt(0)).setTextColor(Color.RED);
    ((TextView) adapterView.getChildAt(0)).setTextSize(20);
    Toast.makeText(this, textView.getText()+" Selected", Toast.LENGTH_SHORT).show();
}
Tushar Lathiya
fuente
0

simplemente agregue un nuevo estilo como este:

<style name="mySpinnerItemStyle" parent="ThemeOverlay.AppCompat.Dark">
    <item name="android:textColor">#000</item>
    <item name="android:color">#000</item>
</style>

y úsalo:

<Spinner
      android:id="@+id/spinnerCategories"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      style="@style/mySpinnerItemStyle"
      android:layout_margin="5dp" />
Elyas Nategh
fuente
0
    String typeroutes[] = {"Select","Direct","Non Stop"};
    Spinner typeroute;

    typeroute = view.findViewById(R.id.typeroute);

    final ArrayAdapter<String> arrayAdapter5 = new ArrayAdapter<String>(
                getActivity(), android.R.layout.simple_spinner_item, typeroutes) {
            @Override
            public boolean isEnabled(int position) {
                if (position == 0) {
                    // Disable the first item from Spinner
                    // First item will be use for hint
                    return false;
                } else {
                    return true;
                }
            }

            public View getView(int position, View convertView, ViewGroup parent) {
                View v = super.getView(position, convertView, parent);
                ((TextView) v).setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
                ((TextView) v).setTextColor(Color.parseColor("#ffffff"));
                return v;
            }         ---->in this line very important so add this

            @Override
            public View getDropDownView(int position, View convertView,
                                        ViewGroup parent) {
                View view = super.getDropDownView(position, convertView, parent);
                TextView tv = (TextView) view;
                if (position == 0) {
                    // Set the hint text color gray
                    tv.setTextColor(Color.GRAY);
                } else {
                    tv.setTextColor(Color.BLACK);
                }
                return view;
            }
        };

        arrayAdapter5.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        typeroute.setAdapter(arrayAdapter5);

eso es todo disfruta de tu codificación ...

mahendren
fuente