2011-02-02 14 views
21

Entiendo que la ruleta cerrada es en realidad una View, creo. Pero supongo que tiene un TextView allí en alguna parte para mostrar el texto. ¿Cómo obtengo acceso a ese TextView para que pueda cambiar el color del texto?Color del texto de una ruleta cerrada

EDITAR: Necesito cambiar esto programáticamente sobre la marcha, no en el XML.

TextView v = (TextView) getView(mySpinner); 

v.setTextColor(..... 

Esto no funciona ...

Gracias!

array_typ=new String[5]; 
    array_typ[0]="Pressure"; 
    array_typ[1]="Level"; 

    array_typ[2]="Overage"; 
    array_typ[3]="Under"; 
    array_typ[4]="Taken"; 


    adaptertyp = new ArrayAdapter<Object>(this,R.layout.simple_spinner_item, array_typ); 
    typ.setAdapter(adaptertyp); 
+0

¿No podría definir el color en su archivo XML? – gnclmorais

Respuesta

9

entiendo que el control de giro cerrado es en realidad una vista, creo.

Sí. Específicamente, es lo que sea que le haya dicho a su SpinnerAdapter para crear.

Pero supongo que tiene un TextView allí en alguna parte para mostrar el texto.

Eso dependería de lo que le dijo a su SpinnerAdapter para crear.

¿Cómo obtengo acceso a ese TextView para poder cambiar el color del texto?

Lo ideal es que no le dé el color correcto, en primer lugar, a través de lo que haya dicho SpinnerAdapter para crear. Si el color varía, anule getView() en su SpinnerAdapter y cambie el color en ese punto.

En caso de necesidad, puede intentar llamar getSelectedView() para obtener la corriente View ser mostrado por el Spinner cerrada, pero cualquiera que sea el cambio que haga aquí pueden ser eliminados en la siguiente selección del usuario, y el color alternativo puede volver más tarde si el anterior View se recicla.

+0

Agregué cómo estoy creando el spinner anterior. Soy realmente nuevo en Android y Java, por lo que aunque tu respuesta suene como si hubiera una respuesta, no sé qué ingresar. ¿Me puede mostrar una línea de código que me permita cambiar el color del texto? ¡¡¡Gracias!!! –

+0

@Mark Worsnop: "Agregué cómo estoy creando el spinner anterior". - echa un vistazo a tu recurso 'R.layout.simple_spinner_item' y cambia el color allí. – CommonsWare

+0

Necesito cambiarlo programáticamente ... –

33

Para modificar el color del texto, cree un nuevo archivo xml en su carpeta res/layout (por ejemplo my_spinner_text.xml). Agregar una vista de texto para el nuevo archivo XML y modificar la forma en que desea:

<TextView android:id="@+id/spinnerText" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:textColor="#CCCCCC" 
    android:textSize="20dp" 
    xmlns:android="http://schemas.android.com/apk/res/android"/> 

Crear una ArrayAdapter que utiliza el nuevo Vista de Texto y configurarlo a tu spinner:

Spinner localSpinner = (Spinner)findViewById(R.id.mySpinner); 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
       R.array.spinner_array, 
       R.layout.my_spinner_text); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    localSpinner.setAdapter(adapter); 
+0

Necesito poder cambiar los colores en la aplicación programáticamente ... –

+1

para mí, tuve que agregar un espacio de nombres en el archivo xml ala

+4

Parece que su sitio web no está conectado. – rekire

1

hacerlo mediante programación que tiene extender la clase adaptador, algo así como:

ArrayAdapter<CharSequence> adapter = new ArrayAdater(this){ 
     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      View v = super.getView(position, convertView, parent);   
      // change the color here of your v 
      v. ... etc. etc   
     } 
    } 
+0

Veo un 'setBackgroundColor()', pero no 'setTextColor()' –

23

Usted puede cambiar el color del texto o puede acceder a la Vista de texto en caso setOnItemSelectedListener,

  spinnerObject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
       ((TextView)parentView.getChildAt(0)).setTextColor(Color.rgb(249, 249, 249)); 

      } 
+0

¡esto funciona! Lo que Budius sugirió no fue porque no pude establecer el color del texto. –

+0

Esto parece ineficaz: establece el color cada vez. Puede establecer el color en todos los elementos en el spinner de una vez extendiendo 'ArrayAdapter' y anulando' getDropDownView() '. –

0

para el cambio de textColor Spinner cerrado tengo hacer de esta manera funciona

@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; 
} 

@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; 
} 
Cuestiones relacionadas