2013-03-23 8 views
8

Ho un'applicazione Android che sto scrivendo per un'azienda di calcestruzzo che verrà utilizzata per il clock in entrata e in uscita. Ho usato alcuni spinners per selezionare elementi come Work Work e Job dai menu a discesa, ma sono preoccupato che gli elementi nei filatori siano troppo vicini e sarà difficile per i dipendenti selezionare l'elemento giusto.Aggiungi più spazio tra gli elementi in Android Spinner senza stile personalizzato?

Mi piacerebbe dare solo un po 'più di spazio tra gli oggetti nello spinner, ma non voglio passare attraverso tutti i problemi di creare uno stile personalizzato, perché in realtà voglio che lo spinner guardi e si comporti esattamente come l'impostazione predefinita, eccetto avere solo un po 'più di padding, ed è molto lavoro dover creare uno stile personalizzato solo per quello.

C'è qualche semplice modifica che posso apportare, come impostare alcune proprietà dello spinner? Ho provato a impostare il tipo di spinner su Dialog, ma mostra solo l'elenco con la stessa quantità di spaziatura, solo non collegato al controllo di selezione.

risposta

15

Credo risposta di Pragnani è corretta, ma è così che in realtà implementato esso ...

-In RES/layout, creato un layout XML con solo una textview in esso, come mostrato di seguito. Questa finestra di testo ha la dimensione/padding personalizzata che voglio.

spinner_row.xml

<?xml version="1.0" encoding="utf-8"?> 
    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/cust_view" 
     android:minWidth="246dp" 
     android:layout_width="match_parent" 
     android:layout_height="48dp" 
     android:gravity="left|center_vertical" 
     android:textColor="@android:color/black"  
     android:textSize="20sp" 
     android:paddingLeft="4dp" 
     android:textIsSelectable="false"/> 

Poi in attività in cui si carica i miei dati nel filatore, quando creo un ArrayAdapter per il mio filatore, passo il TextView personalizzato come secondo parametro al costruttore ArrayAdapter.

Spinner spinClockInWorkSite = (Spinner)findViewById(R.id.spinClockInWorkSite); 
ArrayAdapter spinClockInWorkSiteAdapter = new ArrayAdapter(this, R.layout.spinner_row, this.workSiteList); 
spinClockInWorkSite.setAdapter(spinClockInWorkSiteAdapter); 

Così ora il filatore usa il mio TextView personalizzato che è definito in spinner_row.xml per ogni elemento della lista.

Questo ha finito per essere più diretto per i miei bisogni che giocare con lo stile.

3

Prova questo, Qui non stai modificando lo stile di selezione, ma aggiungendo la funzionalità aggiuntiva che desideri per gli oggetti di selezione impostando lo stile per l'elemento di selezione.

<style name="spinnerStyle" parent="@android:style/Widget.TextView.SpinnerItem"> 
     <item name="android:padding">5sp</item> 
    </style> 

e applicare lo stile alla vostra filatore utilizzando lo stile Attribué

style="@style/spinnerStyle" 
+3

Ho provato esattamente questo, ma non sembrava fare nulla. Metto lo stile nel file styles.xml nella mia cartella res/values. Ho provato a impostare il valore di padding su 50 solo così potevo essere sicuro che ci fosse un cambiamento, e nulla è cambiato. – Jim

+0

@Jim Ma lo stile parent dovrebbe essere android: style/Widget.TextView.SpinnerItem – Pragnani

+1

Credo che questa sia la risposta corretta, ma ha un errore minore in cui mostra style = "@ style/spinnerStyleView" ma lo stile nell'esempio di codice sopra è in realtà chiamato spinnerStyle. Ho seguito un percorso diverso utilizzando un XML in res \ layout con solo una textview e definendo le dimensioni della textview e il padding in XML.Poi, quando ho creato l'adattatore per il mio spinner, ho passato la vista testo personalizzata come secondo parametro nel costruttore ArrayAdapter, e usa la mia vista testuale personalizzata per ogni elemento nell'elenco. Pensavo che sarebbe stata una cosa difficile da implementare, ma in realtà era piuttosto semplice. – Jim

9

Se si desidera fornire una spaziatura soddisfacente, se invece tutti questi XML e tutti, È possibile utilizzare facilmente "simple_spinner_dropdown_item" nell'adattatore spinner.

Come

String [] dataList = new String[]{"Select","A","B","C","D","E"}; 
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_dropdown_item, dataList); 
     spinner.setAdapter(dataAdapter); 

Ha funzionato per me.

+5

Questa risposta, oltre ad essere in ritardo di 2 anni, non affronta in alcun modo la domanda vera e propria. – Jim

+0

In realtà funziona, l'unico problema è che dà anche una spaziatura extra allo Spinner stesso. – Anthony

Problemi correlati