2012-12-19 18 views
9

Sto cercando di ottenere uno spinner ICS come nella mia app, e giocare per ore, finalmente sto usando HoloEverywhere per ottenere questo, e funziona, ma ho un piccolo problema di disign, è che il filatore non è avvolgente il suo contenuto come ho impostato in XML, e di default si presenta così:Dimensioni spinner Android molto grandi

enter image description here

Davvero ho cercato su google per ore, e tutto quello che ho trovato è che come ridimensionare gli elementi filatore e non la vista stessa, significa che voglio che lo spinner sia regolato sulla dimensione dell'articolo selezionata in questo modo:

enter image description here

Ecco il mio XML:

<RelativeLayout 
android:layout_width="match_parent" 
android:layout_height="40dp" 
android:orientation="horizontal" > 

<org.holoeverywhere.widget.Spinner 
    android:id="@+id/spnCities" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true" 
    android:layout_marginRight="10dp" 
    /> 

<TextView 
    android:id="@+id/tvCities" 
    android:layout_width="70dp" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_centerVertical="true" 
    android:layout_marginLeft="10dp" 
    android:text="@string/city" 
    android:textAppearance="?android:attr/textAppearanceSmall" /> 

qualsiasi aiuto sarebbe il benvenuto.

Grazie.

risposta

6

Lo spintore ha una larghezza massima dei suoi articoli, ma al massimo una larghezza genitore (su layout_width = wrap_content). È possibile creare classe CustomSpinner in org.holoeverywhere.widget pacchetto e di override metodo measureContentWidth:

@Override 
int measureContentWidth(SpinnerAdapter adapter, Drawable background) { 
    if (adapter == null) { 
     return 0; 
    } 
    View view = adapter.getView(getSelectedItemPosition(), null, this); 
    if (view.getLayoutParams() == null) { 
     view.setLayoutParams(new ViewGroup.LayoutParams(
       ViewGroup.LayoutParams.WRAP_CONTENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT)); 
    } 
    view.measure(MeasureSpec.makeMeasureSpec(0, 
      MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, 
      MeasureSpec.UNSPECIFIED)); 
    int width = view.getMeasuredWidth(); 
    if (background != null) { 
     Rect mTempRect = new Rect(); 
     background.getPadding(mTempRect); 
     width += mTempRect.left + mTempRect.right; 
    } 
    return width; 
} 
+0

Anche questo ha funzionato per me! Crea il tuo CustomSpinner e implementi semplicemente quel metodo (senza l'override) e usando ir nella tua app la larghezza dell'elemento selezionato ha il suo vero con :) nelle versioni precedenti lo spinner di default lo fa, almeno 2.3 – Rako