2012-12-19 24 views
9

Ich versuche, ein ICS Spinner wie in meiner App zu bekommen, und stundenlang herumspielen, schließlich benutze ich HoloEverywhere, um dies zu bekommen, und es funktioniert, aber ich habe ein kleines Problem, ist, dass der Spinner nicht Einwickeln seines Inhalts, wie ich in der xml, und standardmäßig das wie folgt aussieht:Android Spinner Größe sehr groß

enter image description here

Wirklich gegoogelt ich das stundenlang, und alles, was ich herausgefunden, dass, wie Spinner Elemente, um die Größe und nicht die Ansicht selbst, bedeutet, dass ich möchte, dass der Spinner auf die gewählte Artikelgröße wie folgt eingestellt wird:

enter image description here

Hier ist meine 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" /> 

jede Hilfe wäre willkommen.

Danke.

Antwort

6

Spinner haben maximale Breite seine Elemente, aber höchstens eine übergeordnete Breite (auf layout_width = wrap_content). Sie können CustomSpinner Klasse in org.holoeverywhere.widget Paket und überschreiben Methode measureContentWidth erstellen:

@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

Dieses auch für mich gearbeitet! Erstellen Sie Ihre eigenen CustomSpinner und nur die Umsetzung dieser Methode (ohne die Überschreibung) und mit ir in Ihrer App die Breite des ausgewählten Elements hat nur seine echte mit :) in früheren Versionen der Spinner tun dies, mindestens 2.3 – Rako