2012-12-19 45 views
9

Tôi đang cố gắng để có được một spinner ICS như trong ứng dụng của tôi, và chơi xung quanh trong nhiều giờ, cuối cùng tôi đang sử dụng HoloEverywhere để có được điều này, và nó làm việc, nhưng tôi có một chút vấn đề disign, là spinner không gói nội dung của nó như tôi thiết lập trong xml, và theo mặc định trông như thế này:Android Spinner Size rất lớn

enter image description here

Thực sự tôi googled này trong nhiều giờ, và tất cả tôi thấy là làm thế nào để thay đổi kích thước mục spinner và không phải là chế độ xem, có nghĩa là tôi muốn điều chỉnh spinner thành kích thước mục đã chọn như sau:

enter image description here

Đây là XML của tôi:

<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" /> 

bất kỳ trợ giúp sẽ được hoan nghênh.

Cảm ơn.

Trả lời

6

Spinner có chiều rộng tối đa các mục của anh ấy, nhưng tối đa là chiều rộng của bố mẹ (trên layout_width = wrap_content). Bạn có thể tạo lớp CustomSpinner trong gói org.holoeverywhere.widget và phương pháp ghi đè lênContentWidth:

@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

Điều này cũng có hiệu quả đối với tôi! Tạo CustomSpinner của riêng bạn và chỉ cần thực hiện phương thức đó (không ghi đè) và sử dụng ir trong ứng dụng của bạn chiều rộng của mục được chọn chỉ có thực với :) trong các phiên bản trước đó theo mặc định làm điều này, ít nhất là 2,3 – Rako