2015-12-16 20 views

risposta

9

È possibile risolvere questo definendo uno sfondo personalizzato in XML, e quindi impostando il margine della freccia dal lato destro.

Inizia definendo un elenco di livelli con uno sfondo rettangolo e un oggetto bitmap per la freccia. Puoi allineare la freccia al centro sul lato destro impostandone la gravità e puoi spostarla verso il centro impostando il suo margine destro tramite l'attributo android: "right". Si noti che questo non muovere dinamicamente la freccia in base alla lunghezza del testo, ma dovrebbe essere un primo passo utile.

spinner_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/color_white" /> 
      <corners android:radius="2.5dp" /> 
     </shape> 
    </item> 
    <item android:right="64dp"> 
     <bitmap 
      android:gravity="right|center_vertical" 
      android:src="@drawable/ic_spinner" /> 
    </item> 
</layer-list> 
+2

Dopo due aspetti potrebbero interessare: 1.There è una staffa chiusa (>) dispersi android: src = "@ drawable/ic_spinner". 2. Il file spinner_background.xml deve essere creato nella cartella drawable. – XerXes

0

Ciò può essere ottenuto attraverso la creazione di un layout personalizzato per la custom_spinner_item.xml oggetto filatore selezionato. Ho aggiunto un TextView che mostra l'oggetto selezionato attualmente. L'icona della freccia viene aggiunta in un ImageView. Puoi usare qualsiasi icona. L'icona della freccia si sposta in base alla lunghezza del testo che non viene raggiunta dalla risposta di TheoKanning. In effetti puoi modificare completamente l'aspetto del tuo spinner in questo layout.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:orientation="horizontal"> 
    <TextView 
     android:id="@+id/spinner_item_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp"/> 
    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:src="@mipmap/ic_arrow_down"/> 
</LinearLayout> 

Creare un adattatore rotore personalizzato e gonfiare la vista sopra. Inoltre, imposta il testo della tua selezione di spinner dall'elenco sovrascrivendo il metodo predefinito getView().

public class CustomSpinnerAdapter extends ArrayAdapter<String> { 
    LayoutInflater inflater; 
    List<String> spinnerItems; 

    public CustomSpinnerAdapter(Context applicationContext, int resource, List<String> spinnerItems) { 
     super(applicationContext, resource, spinnerItems); 
     this.spinnerItems = spinnerItems; 
     inflater = (LayoutInflater.from(applicationContext)); 
    } 
    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     view = inflater.inflate(R.layout.custom_spinner_item, null); 
     TextView type = (TextView) view.findViewById(R.id.spinner_item_text); 
     type.setText(spinnerItems.get(i)); 
     return view; 
    } 
} 

Quindi creare un'istanza della classe CustomSpinnerAdapter e impostarla come adattatore per lo spinner. spinnerList è l'elenco di elementi da mostrare nello spinner.

CustomSpinnerAdapter customSpinnerAdapter = new CustomSpinnerAdapter(getContext(), android.R.layout.simple_spinner_item, spinnerList); 
spinner.setAdapter(customSpinnerAdapter); 
-1
1) Set the background of spinner to @null 

<Spinner 
    android:id="@+id/spinner" 
    android:background="@null" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 

2) In the spinner adapter layout, create an Imageview to the right of Textview or whatever content is in there 
change the visibility of the imageview to "gone" 

3)Override the onItemSelected method of the spinner in your activity, 
in the onItemSelected method, call the Imageview 
    ImageView downArrow = (ImageView) view.findViewById(R.id.down_arrow); 

change its visibility to "visible" 
Problemi correlati