在Android中向Spinner添加箭头图像

20

我创建了一个用于Spinner的背景Drawable。现在我想在这个背景中放置箭头图像。我尝试过像android:drawableRight="arrowimage"这样的东西,但似乎没有显示任何内容。有人知道我如何在自定义Spinner背景中包含图像吗?


android:drawableRight="arrowimage" 是在Spinner适配器中使用的TextView中完成的。 - Illegal Argument
如果您展示出您尝试过的内容,那么每个人都可以更容易地帮助您。因此,请发布一些代码。 - Aniruddha
5个回答

60

在drawable文件夹中创建一个XML文件,以任何名称命名,例如 spinner_bg.xml,并添加以下行:

创建一个名称为 spinner_bg.xml 的XML文件,并将其放置在drawable文件夹中,然后添加以下内容:

<?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>
将以下这些行添加到位于 "values" 文件夹中的 "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" />

在 spinner_bg.xml 中,位图让我感到困惑。这是用来绘制图像的吗? - user3781214
你应该给你的图片(箭头)命名为 android:src="@drawable/your_image_name" - Aniruddha
啊好的。我还没有尝试过在这种情况下使用层列表。android:src是有道理的。我一直在尝试直接在我的布局文件中定义一个图像到右侧,采用的是android:drawableRight,但并没有起作用。我明天会尝试这个解决方案。谢谢。 - user3781214
1
文本和箭头在Android 6中重叠。 - ReZa

2

Aniruddha的解决方案在我使用JellyBean(4.2.2)或Kitkat(4.4)时很好用。但不幸的是,在Marshmallow(6.0)上我遇到了一个异常,可能的原因在这里解释:使用drawable资源

最终,我只是做了个小技巧,将Spinner放置到带有ImageView的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>

1
在Spinner上设置您的图像ICON:

<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
这对我有用:

这对我有用:

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

最好和最简单的解决方案。 - Bosko Vaskovic

1

这对我有效。你可能缺少默认状态。没有发布你的代码很难确定。

<!-- 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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接