更改微调器下拉图标

Mul*_*ard 40 android android-spinner

我找到的解决方案更改了微调器下拉图标,其中所有:

1.创建一个自定义drawable

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/vector_drawable_ic_dropdown_black" android:state_focused="true" android:state_pressed="false" />
    <item android:drawable="@drawable/vector_drawable_ic_dropdown_black" android:state_focused="true" android:state_pressed="true" />
    <item android:drawable="@drawable/vector_drawable_ic_dropdown_black" android:state_focused="false" android:state_pressed="true" />
    <item android:drawable="@drawable/vector_drawable_ic_dropdown_black" />
</selector>
Run Code Online (Sandbox Code Playgroud)

2.将drawable设置为微调器背景:

<Spinner
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp"
    android:background="@drawable/custom_spinner_icon"
    android:gravity="center"
    android:paddingBottom="8dp"
    android:paddingTop="8dp"
    android:textColor="@color/textcolorprimary" />
Run Code Online (Sandbox Code Playgroud)

结果是:

在此输入图像描述

正如您所看到的,这不是一个可接受的解决方案,因为图标需要右对齐而不是拉伸.

我该怎么做才能使图标不拉伸并对齐?

编辑

由于没有可行的解决方案,我想我必须指出我的问题.这就是我的Spinner使用标准主题的样子:

<Spinner
    android:id="@+id/products_download_spinner_language"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp"
    android:gravity="center"
    android:paddingBottom="8dp"
    android:paddingTop="8dp"
    android:textColor="@color/textcolorprimary"
    android:theme="@android:style/Theme.Holo.Light.DarkActionBar" />
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

而我想要的一切(我猜这真的不多)正在改变箭头.我不希望显示右下角的箭头,我希望这个箭头垂直居中显示在右边:

在此输入图像描述

到目前为止我尝试的每个解决方案:

旋转下拉箭头

如何在微调器中设置下拉箭头?

根本没工作.他们有拉伸的图标或底线缺失或其他东西完全错误.我只想要另一支箭.

Peh*_*laj 96

尝试将以下样式应用于您的微调器

style="@style/SpinnerTheme"
Run Code Online (Sandbox Code Playgroud)

// 旋转器样式:

<style name="SpinnerTheme" parent="android:Widget.Spinner">
    <item name="android:background">@drawable/bg_spinner</item>
</style>
Run Code Online (Sandbox Code Playgroud)

// bg_spinner.xml 用箭头替换arrow_down_gray

<?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="0.33dp" android:color="#0fb1fa" />

                    <corners android:radius="0dp" />

                    <padding android:bottom="3dp" android:left="3dp" android:right="3dp" android:top="3dp" />
                </shape>
            </item>

            <item android:right="5dp">

                <bitmap android:gravity="center_vertical|right" android:src="@drawable/arrow_down_gray" />

            </item>

        </layer-list>

    </item>

</selector>
Run Code Online (Sandbox Code Playgroud)

  • 如果@ drawable/arrow_down_gray是矢量怎么办? (10认同)
  • @Lester不要在项目标签内使用位图标签,直接使用项目属性: ```&lt;item android:width="24dp" android:height="24dp" android:gravity="end|center_vertical" android:可绘制=“@dr​​awable/ic_vector”/&gt;``` (6认同)
  • @Lester我无法在那里添加矢量.相反,当我尝试直接使用向量作为项目时,`<item android:drawable ="@ drawable/arrow_down_greay"android:gravity ="center_vertical | right"/>`,它仍在某些设备上延伸.你能提出解决方案吗? (3认同)
  • @milosmms,这适用于 API&gt;=23,并且您不必在 API&gt;24 中添加 android:width="24dp" android:height="24dp",但对于 API&lt;23,箭头会拉伸。其他人有使用 api&lt;23 的向量的解决方案吗?我尝试使用位图方法,但在 API23 中失败 (3认同)

Ron*_*rka 16

为此,您可以使用.9 Patch Image,只需将其设置为背景即可.

android:background="@drawable/spin"
Run Code Online (Sandbox Code Playgroud)

在这里,我会给你.9补丁图片.尝试这个.

在此输入图像描述 在此输入图像描述

右键单击图像,然后单击"将图像另存为"

像这样设置图像名称:anyname.9.png并点击保存.

享受......快乐的结合.:)


小智 11

将主题添加到微调器

<Spinner style="@style/SpinnerTheme"
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>
Run Code Online (Sandbox Code Playgroud)

将spinnerTheme添加到styles.xml

<style name="SpinnerTheme" parent="android:Widget.Spinner">
    <item name="android:background">@drawable/spinner_background</item>
</style>
Run Code Online (Sandbox Code Playgroud)

使用“ ic_keyboard_arrow_down_24dp”将新的->“矢量资产”添加到图形中

将spinner_background.xml添加到drawable

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <layer-list>
            <item android:drawable="@drawable/ic_keyboard_arrow_down_24dp" android:gravity="center_vertical|right" android:right="5dp"/>
        </layer-list>
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)

  • 在Android OS 5.0上看起来很舒展。有铅吗? (2认同)

Sun*_*nil 5

我们可以像我一样通过隐藏图标来管理它:

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <Spinner android:id="@+id/fragment_filter_sp_users"
             android:layout_width="match_parent"
             android:background="@color/colorTransparent"
             android:layout_height="wrap_content"/>

    <ImageView
            android:layout_gravity="end|bottom"
            android:contentDescription="@null"
            android:layout_marginBottom="@dimen/_5sdp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_arrow_bottom"
    />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)