android - studio - Color del texto de un spinner cerrado.
text color spinner android (5)
Entiendo que el spinner cerrado es en realidad una View
, creo. Pero supongo que tiene un TextView
allí en algún lugar para mostrar el texto. ¿Cómo obtengo acceso a ese TextView
para poder cambiar el color del texto?
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);
Entiendo que el spinner cerrado es en realidad una vista, creo.
Sí. Específicamente, es lo que le SpinnerAdapter
a tu SpinnerAdapter
que SpinnerAdapter
.
Pero supongo que tiene un TextView allí en algún lugar para mostrar el texto.
Eso dependería de lo que le SpinnerAdapter
a tu SpinnerAdapter
para crear.
¿Cómo obtengo acceso a ese TextView para poder cambiar el color del texto?
Lo ideal es que no lo hagas: le das el color correcto en primer lugar, a través de lo que le SpinnerAdapter
a SpinnerAdapter
que SpinnerAdapter
. Si el color varía, anule getView()
en su SpinnerAdapter
y cambie el color en ese punto.
En caso de apuro, puede intentar llamar a getSelectedView()
para obtener la View
actual mostrada por el Spinner
cerrado, pero cualquier cambio que realice aquí puede eliminarse en la próxima selección del usuario, y el color alternativo puede volver más tarde si la View
anterior se recicla
Para Change Textcolor de Spinner cerrado lo hago 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;
}
Para hacerlo programáticamente tienes que extender la clase de adaptador, algo 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
}
}
Para modificar el color del texto, cree un nuevo archivo xml en su carpeta res / layout (por ejemplo, my_spinner_text.xml). Agregue una vista de texto al nuevo archivo xml y modifique cómo desee:
<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"/>
Cree un ArrayAdapter que use el nuevo TextView y ajústelo a su rueda giratoria:
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);
Puede cambiar el color del texto o puede acceder a la vista de texto en el evento 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));
}