2015-10-27 15 views
13

Come si specifica per uno spinner in Android un riempimento extra in alto/in basso del primo/ultimo elemento? Vedi il campione di Goolge sotto (8 dp spaziatura). Google Simple MenuImbottitura superiore/inferiore per Spinner

+0

Prova questi collegamenti [1 ° link] (http://stackoverflow.com/questions/17407626/custom-layout-for-spinner-item) [2 ° link] (http://stackoverflow.com/questions/8946893/ androide-custom-spinner-layout) [Programma di esempio] (http://mrbool.com/how-to-customize-spinner-in-android/28286) Spero che questa guida sia completa –

risposta

3

Spinner non supporta più tipi di visualizzazione. Issue.

Ti ho suggerito di utilizzare la finestra di dialogo per mostrare la tua lista.

cura

in base al tuo commento risolto il problema con questo question

+0

L'unica soluzione sembra essere questa. L'ho trovato seguendo il tuo link.http://stackoverflow.com/a/16400899/519790 – multiholle

2

È necessario creare un adattatore personalizzato per voi Spinner utilizzando il layout personalizzato. Pertanto, è sufficiente fornire un layout con il margine/paddins corretto.

Spinner spinner = (Spinner) findViewById(R.id.myspinner); 
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.data, R.layout.spinner_item); 
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); 
spinner.setAdapter(adapter); 

Si può trovare un valido esempio here.

1

Basta creare un layout separato per gli elementi che si desidera visualizzare nella casella.

Qualcosa di simile

spinner_text_view.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/customTextView" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:padding="15dp" 
android:text="@string/sample_list_item" 
android:textColor="@android:color/black" 
android:textSize="20sp" /> 

Poi nella vostra attività/frammento, è possibile creare un adattatore (un adattatore array per essere semplice in questo caso) e passare questo layout che adattatore di riferimento. Infine, imposta l'adattatore allo spinner e ottieni il risultato desiderato.

Codice di esempio.

private void setupSpinner() { 
    String[] sampleSpinnerItems = {"One", "Two", "Three", "Four", "Five"}; 
    ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, 
      R.layout.spinner_text_view, sampleSpinnerItems); 
    sampleSpinner.setAdapter(spinnerAdapter); 
}  

Spero che questo aiuti.

Nota: spinner_text_view è il file di layout creato in precedenza.

+0

Questo non mi dà un riempimento extra prima del prima e dopo l'ultimo elemento. – multiholle

1

È necessario un adattatore personalizzato per questo e layout personalizzati. È possibile utilizzare 2 layout. Supponendo che tu abbia n elementi da mostrare, nella tua selezione avrai n + 2. iF la posizione è 0 (il primo elemento) o l'ultimo elemento che mostrerai il layout vuoto altrimenti mostrerai l'altro layout. Il layout vuoto che verrà utilizzato per la creazione di questo spazio

1

È possibile eseguire questa operazione utilizzando personalizzati Adapter per Spinner. Si sarà simile a questa:

class YourAdapter extends BaseArrayAdapter<YourObject> { 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.your_item, parent, false); 
      DropDownViewHolder holder = new DropDownViewHolder(); 
      holder.root = convertView.findViewById(R.id.drop_down_root); 
      // other assignments etc. 
      convertView.setTag(holder); 
     } 
     DropDownViewHolder holder = (DropDownViewHolder) convertView.getTag(); 
     int bottomPadding = 0; 
     int topPadding = 0; 
     if (position == 0) { 
      topPadding = getContext().getResources().getDimensionPixelSize(R.dimen.margin_8); 
     } else if (position == (getCount() - 1)) { 
      bottomPadding = getContext().getResources().getDimensionPixelSize(R.dimen.margin_8); 
     } 

     holder.root.setPadding(0, topPadding, 0, bottomPadding); 
     // other UI related logic etc. 
     return convertView; 
    } 

    // ... 

    public static class DropDownViewHolder { 
     View root; 
     // other views 
    } 
} 

logica In realtà con l'impostazione chilo in più può essere modificata per cambiare un po 'di visibilità della vista stub per VISIBLE o gonfiare qualche altra disposizione a seconda della posizione, ma la soluzione con imbottitura sembra più naturale per me.