2012-10-31 14 views
14

voglio aggiungere un'immagine a spinner Sono provato come:Come aggiungere l'immagine per Spinner Android

<Spinner 
    android:id="@+id/spinner1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/myImage" /> 

Ma con questo codice il segno della freccia verso il basso sul filatore diventa invisibile la prego di dirmi come risolvere quel problema !! Voglio fare esattamente come in questa immagine

enter image description here

+0

Vuoi modificare lo sfondo del filatore? –

+1

http://stackoverflow.com/questions/3609231/how-is-it-possibile-per-creare-a-spinner-with-images-instead-of-text –

risposta

14

Creare un row.xml in /res/layout/. Per impostare il layout su ogni riga.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
    <ImageView 
    android:id="@+id/icon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/icon"/> 
    <TextView 
    android:id="@+id/weekofday" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 
</LinearLayout> 

e nel file di Java aggiungere questo codice come

Spinner mySpinner = (Spinner)findViewById(R.id.spinner); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
    R.layout.row, R.id.weekofday, YourArrayHere); 
    mySpinner.setAdapter(adapter); 
+0

bentornato @ram ottima risposta. –

+0

Grazie @hardikjoshi –

+0

Amico, dove è (definito R.id.spinner? – Siddharth

5

Nel mio caso ho appena usato layout standard per gli elementi Spinner e sovrascrivere solo un po 'l'ArrayAdapter.

private class PaymentTypeArrayAdapter extends ArrayAdapter<PaymentType> { 

    public PaymentTypeArrayAdapter(Context context) { 
     super(context, android.R.layout.simple_spinner_item); 

     addAll(PaymentType.getPaymentTypes()); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     TextView label = (TextView) super.getView(position, convertView, parent); 

     PaymentType paymentType = getItem(position); 
     label.setText(paymentType.getStringResourceId()); 
     label.setCompoundDrawablesWithIntrinsicBounds(0, 0, paymentType. 
       getImageResourceId(), 0); 

     return label; 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     TextView label = (TextView) super.getDropDownView(position, convertView, parent); 

     PaymentType paymentType = getItem(position); 
     label.setText(paymentType.getStringResourceId()); 
     label.setCompoundDrawablesWithIntrinsicBounds(0, 0, paymentType. 
       getImageResourceId(), 0); 

     return label; 
    } 
} 

quindi impostare l'adattatore per il filatore:

mPaymentTypeArrayAdapter = new PaymentTypeArrayAdapter(getContext()); 
    setAdapter(mPaymentTypeArrayAdapter); 

In questo approccio la chiave è stato quello di utilizzare la setCompoundDrawablesWithIntrinsicBounds per l'etichetta

Problemi correlati