2013-03-22 12 views
11

Ho uno spinner con diverse opzioni, ognuna con una semplice stringa. Inizialmente, il testo è tutto bianco. Tuttavia, se l'utente seleziona un'opzione (facendolo diventare ciò che viene visualizzato in alto), vorrei che il testo diventasse rosso.Cambiare il colore TEXT (non di sfondo) di uno spinner quando si seleziona un elemento

Come posso fare questo?

EDIT: risolto

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
    ((TextView) arg1).setTextColor(Color.parseColor("#E3170D")); 
} 
+0

consulta questo http://stackoverflow.com/questions/7584158/setting-background-color-for-spinner-item-on-selection – rajeshwaran

risposta

18

se l'utente seleziona l'opzione (inducendolo a diventare ciò che è visualizzato in alto), vorrei che il testo diventare rosso.

Quindi molto probabilmente hai creato OnItemSelectedListener() per il tuo Spinner. Quindi nel metodo onItemSelected() puoi semplicemente cambiare il colore del testo.

Pseudocodice:

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
    TextView selectedText = (TextView) parent.getChildAt(0); 
    if (selectedText != null) { 
     selectedText.setTextColor(Color.RED); 
    } 
} 

Speranza che aiuta.

+0

questo funziona sicuramente, in realtà l'ho trovato fuori qualche muto fa ma non l'avevo ancora pubblicato. Una piccola modifica però, vedi la mia modifica se sei curioso – drewmoore

+1

Questo non funziona proprio quando lo si ruota però. Vedi la mia domanda qui: http://stackoverflow.com/questions/33747884/android-nullpointerexception-spinner-onitemselected-view-parameter-is-null-a –

2

vedere questa risposta here e io vi copiarlo e incollarlo

  1. Crea visualizzazione personalizzata di layout (ad esempio da TextView)
  2. Crea selettore e impostarlo come sfondo di quella vista
  3. Set Spinner con vista personalizzata

Selector: custom_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" 
      android:state_pressed="false" 
      android:drawable="@color/light_grey" /> 
    <item android:state_focused="true" 
      android:state_pressed="true" 
      android:drawable="@color/light_grey" /> 
    <item android:state_focused="false" 
      android:state_pressed="true" 
     android:drawable="@color/light_grey" /> 
    <item android:state_selected="true" android:drawable="@color/light_grey"/> 
    <item android:drawable="@color/white" /> 
</selector> 

visualizzazione personalizzata di layout: my_simple_item

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:lines="1" 
android:padding="5dip" 
android:background="@drawable/custom_selector"/> 

inizializzazione Spinner:

String[] items = new String[] {"One", "Two", "Three"}; 
Spinner spinner = (Spinner) findViewById(R.id.mySpinner); 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.my_simple_item, items); 

Spero che questo aiuti

+0

Sono un po 'confuso. Creo il "selettore" (l'elemento in alto), negli stili xml, giusto? Allora dove applico quello stile al my_simple_item? – drewmoore

+0

Penso che questo cambierà lo sfondo di textview ma non textcolor –

+0

sullo spinner, basta usare questa riga 'android: background =" @ drwable/custom_selector "' –

0

creare come:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="false" android:drawable="@color/red" /> 
<item android:drawable="@android:color/transparent" /> 
    </selector> 

e nella vostra attività xml:

<Spinner............... 
android:drawSelectorOnTop="true" 
    android:background="@drawable/sample"/> 
0

Basta aggiungere lo OnItemSelectedListener allo 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) { 

     } 
    }); 
2

alcuni di voi che l'utilizzo MaterialBetterSpinner e Binding i layout, tutto quanto sopra non aiuterà, provate questo, spero che ti aiuta a:

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 è qualcosa di simile:

<?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> 

creare un filatore con questo adattatore e yourXML:

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

final MaterialBetterSpinner spinner = new MaterialBetterSpinner(getContext()); 
spinner.setAdapter(adapter); 
Problemi correlati