82

背景色に合わせてスピナーの背景レイアウトを変更する必要があるアプリを開発しています。調査したところ、9 パッチ イメージを作成する必要があることがわかりました。9 パッチ イメージの作成を完了し、アプリで使用しましたが、通常のスピナーよりも大きく見え、スピナーにもドロップ ダウン ボタンが表示されませんでした。

Spinner の 9 パッチ イメージの作成からアプリでの使用まで、明確なチュートリアルを提供していただければ幸いです。

スピナーはこんな感じ

スピナーのコード

 <Spinner
        android:id="@+id/spnIncredientone"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/txtMixtureTitle" 
        android:layout_marginLeft="5dip"
        android:layout_marginRight="5dip"
        android:background="@drawable/spinner_background"
        android:prompt="@string/selectmixture" />
4

15 に答える 15

119

次のように、xml でスピナーの背景色を設定できます。

android:background="YOUR_HEX_COLOR_CODE"

スピナーでドロップダウンメニューを使用すると、背景色を次のように設定できます。

android:popupBackground="YOUR_HEX_COLOR_CODE"
于 2012-11-25T11:15:30.683 に答える
69

このようにして、背景色とドロップダウンアイコンを変更できます

Step1: drawable フォルダー内に、スピナーの枠線用の background.xml を作成します。

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/transparent" />
<corners android:radius="5dp" />
<stroke
    android:width="1dp"
    android:color="@color/darkGray" />
</shape>  //edited

ステップ 2: スピナーのレイアウト デザインには、このドロップ ダウン アイコンまたは任意の画像 drop.pnj を使用します。この画像を次のように使用します

  <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="3dp"
                    android:layout_weight=".28"
                    android:background="@drawable/spinner_border"
                    android:orientation="horizontal">

                    <Spinner
                        android:id="@+id/spinner2"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:layout_gravity="center"
                        android:background="@android:color/transparent"
                        android:gravity="center"
                        android:layout_marginLeft="5dp"
                        android:spinnerMode="dropdown" />

                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:layout_gravity="center"
                        android:src="@mipmap/drop" />

                </RelativeLayout>

最終的には下の画像のようになり、丸い領域のどこでもクリック可能で、imageView の click Lister を記述する必要はありません。

詳細については、こちらを参照してください。

ここに画像の説明を入力

于 2016-01-07T05:20:32.423 に答える
25

それは古い投稿ですが、同じ問題を探しているときに見つけたので、2セントも追加すると思いました. これは、ドロップダウン矢印を使用したスピナーの背景の私のバージョンです。矢印だけでなく、完全な背景だけです。

こんな感じです.. spinner_bg.xml を使用した Spinner のスクリーンショット

スピナーに塗って…

<Spinner
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="@drawable/spinner_bg" />

spinner_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <color android:color="@color/InputBg" />
    </item>
    <item android:gravity="center_vertical|right" android:right="8dp">
        <layer-list>
            <item android:width="12dp" android:height="12dp" android:gravity="center" android:bottom="10dp">
                <rotate
                    android:fromDegrees="45"
                    android:toDegrees="45">
                    <shape android:shape="rectangle">
                        <solid android:color="#666666" />
                        <stroke android:color="#aaaaaa" android:width="1dp"/>
                    </shape>
                </rotate>
            </item>
            <item android:width="30dp" android:height="10dp" android:bottom="21dp" android:gravity="center">
                <shape android:shape="rectangle">
                    <solid android:color="@color/InputBg"/>
                </shape>
            </item>
        </layer-list>
    </item>
</layer-list>

@color/InputBg背景にしたい色に置き換える必要があります。

まず、背景を目的の色で塗りつぶします。次に、子レイヤーリストが正方形を作成し、それを 45 度回転させます。次に、背景色の付いた 2 番目の Rectangle が回転した正方形の上部を覆い、下向きの矢印のように見えます。(回転した長方形には余分なストロークがあり、実際には必要ありません)

于 2016-07-07T16:19:47.480 に答える
12

次のように、スピナー アイテム用に新しいパーソナライズされたレイアウトを作成する必要があります。名前を付けます。

spinner_item.xml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textColor="#ff0000" />

次に、スピナー宣言で、スピナーがアダプターで新しいレイアウトを使用するようにする必要があります。

ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
R.layout.spinner_item, YOUR_SPINNER_CONTENT);
spinner.setAdapter(adapter);

ドロップダウン リストの要素をパーソナライズするには、別のレイアウトを作成する必要があります。ここでは、それを spinner_dropdown_item.xml と名付けます。

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerDropDownItemStyle"
    android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:textColor="#aa66cc"/>

次にアダプターで:

ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
R.layout.spinner_item, YOUR_SPINNER_CONTENT);
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
spinner.setAdapter(adapter);
于 2014-05-26T17:05:02.820 に答える
12

Jakob が指摘したように、android:popupBackgroundドロップダウン (スピナーを開いた状態) の重要な属性ですが、色だけを使用する代わりに、次のような 9 パッチのドローアブルで最良の結果が得られました。

ここに画像の説明を入力
menu_dropdown_panel.9.png

選択した背景色のこの 9 パッチ画像を生成するのは非常に簡単であることに注意してください。たとえば、この回答で説明したように、このオンライン ツールを使用します。

したがって、私の Spinner XML 定義は次のようになります。

<Spinner
    android:id="@+id/spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/navigationBlue"
    android:spinnerMode="dropdown"
    android:popupBackground="@drawable/menu_dropdown_panel"
    />

そして結果:

(上記のスクリーンショットのように、カスタム フォントの場合は、カスタム SpinnerAdapter も必要です。)

少なくとも Android 4.0 以降 (API レベル 14 以降) で動作します。

于 2014-08-27T09:37:07.603 に答える
0

Android Studio には定義済みのコードがあり、直接使用できます。 android:popupBackground ="HEX カラーコード"

于 2019-04-01T11:18:29.353 に答える