9

私は自分のアプリのようにICSスピナーを取得しようとしていますが、何時間も遊んでいますが、最終的にはHoloEverywhereを使用してこれを取得していますが、機能していますが、スピナーがラップしていないという問題があります。 xmlで設定したコンテンツで、デフォルトでは次のようになります。

ここに画像の説明を入力してください

本当に私はこれを何時間もグーグルで検索しました、そして私が見つけたのはビュー自体ではなくスピナーアイテムのサイズを変更する方法は、スピナーを次のように選択したアイテムサイズに調整したいということです:

これが私の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" />

</RelativeLayout>
4

1 に答える 1

6

スピナーのアイテムの最大幅は最大ですが、最大で親の幅です(layout_width = wrap_contentの場合)。org.holoeverywhere.widgetパッケージにCustomSpinnerクラスを作成し、メソッド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;
}
于 2012-12-20T08:11:52.650 に答える