web-dev-qa-db-ja.com

Androidスピナーに矢印画像を追加

スピナーに使用する背景ドローアブルを作成しました。この背景の中に矢印画像があります。 Android:drawableRight = "arrowimage"のようなものを試しましたが、何も表示されないようです。スピナーのカスタム背景に画像を含める方法を知っている人はいますか?

19
user3781214

spinner_bg.xmlなどの任意の名前で描画可能なフォルダーにXMLを作成し、次の行を追加します

<?xml version="1.0"
      encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <item>
    <layer-list>
      <item>
        <shape>
          <gradient Android:angle="90"
                    Android:endColor="#ffffff"
                    Android:startColor="#ffffff"
                    Android:type="linear" />

          <stroke Android:width="1dp"
                  Android:color="#504a4b" />

          <corners Android:radius="5dp" />

          <padding Android:bottom="3dp"
                   Android:left="3dp"
                   Android:right="3dp"
                   Android:top="3dp" />
        </shape>
      </item>
      <item>
        <bitmap Android:gravity="bottom|right"
                Android:src="@drawable/spinner_ab_default_holo_dark_am" />
        // you can use any other image here, instead of default_holo_dark_am
      </item>
    </layer-list>
  </item>
</selector>

値フォルダー内にあるstyles.xmlに次の行を追加します

<style name="spinner_style" >
        <item name="Android:background">@drawable/spinner_bg</item>
        <item name="Android:layout_marginLeft">10dp</item>
        <item name="Android:layout_marginRight">10dp</item>
        <item name="Android:layout_marginBottom">10dp</item>
        <item name="Android:paddingLeft">8dp</item>
        <item name="Android:paddingTop">5dp</item>
        <item name="Android:paddingBottom">5dp</item>
</style>

次に、このスタイルをスピナーに次のように追加します

<Spinner Android:id="@+id/spinner1"
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         style="@style/spinner_style"
         Android:popupBackground="#cccccc" />
59
Aniruddha

JellyBean(4.2.2)またはKitKat(4.4)を使用したとき、Aniruddhaのソリューションはうまくいきました。しかし、残念ながらマシュマロ(6.0)には例外があり、考えられる原因は次のとおりです: Drawable resources

最終的にはトリックを作成し、次のようなImageViewでSpinnerをLinearLayoutに配置しました。

<LinearLayout
    Android:id="@+id/spinner_layout"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center">

    <Spinner
        Android:id="@+id/spinner"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" />
    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:src="@drawable/your_arrow_drawable"/>
</LinearLayout>
2
takahawk

これは私のために動作します。デフォルト状態が欠落している可能性があります。コードを投稿せずに伝えることは困難です。

<!-- theme -->
<item name="Android:dropDownSpinnerStyle">@style/mySpinnerStyle</item>

<!-- style -->
<style name="mySpinnerStyle" parent="Android:Widget.Holo.Spinner">
      <item name="Android:background">@drawable/mySpinner_background</item>
</style>

<!-- mySpinner_background -->
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_enabled="false"
          Android:drawable="@drawable/mySpinner_disabled" />
    <item Android:state_pressed="true"
          Android:drawable="@drawable/mySpinner_pressed" />
    <item Android:state_pressed="false" Android:state_focused="true"
          Android:drawable="@drawable/mySpinner_focused" />
    <item Android:drawable="@drawable/mySpinner_default" />
</selector>
1
Rob

画像アイコンをスピナーに設定します。

<item>

    <layer-list>

        <item>
            <color Android:color="@Android:color/white" />
        </item>

        <item>
            <bitmap Android:gravity="center_vertical|right" Android:src="@drawable/down_arrow" />
        </item>

    </layer-list>

</item>
1
siddharth patel

これは私のために働いています:

<Spinner
      Android:id="@+id/spinner"
      Android:layout_width="wrap_content"
      Android:layout_height="wrap_content"
      Android:theme="@style/ThemeOverlay.AppCompat.Light"
      Android:spinnerMode="dropdown" />
0
Jasmine John