题 在XML中更改Spinner的下拉箭头的颜色


正如我在我的问题中所写,我想改变下拉箭头的颜色(默认箭头,而不是自定义箭头或类似的东西) Spinner  在XML中,但问题是我找不到任何东西来引用它 XML

可能吗?如果是,我该如何更改颜色?

提前致谢。


36
2017-08-23 11:51


起源


看看答案 这里 - derfect
@Rayes但它是自定义下拉列表,而不是默认下拉列表。 - Francisco Romero
@ Error404 3个月后,我遇到了同样的问题。你接受的答案帮我解决了问题。 1投票给你1 Hussein :) - Edijae Crusar


答案:


有三种方法可以实现这一目标。

1.通过代码:

在你的xml中,确保你的微调器有一个id。假设我们有一个id为“spinner”的微调器。

在您的代码中,在onCreate()中添加以下内容:

Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.getBackground().setColorFilter(getResources().getColor(R.color.red), PorterDuff.Mode.SRC_ATOP);

其中红色是你定义的颜色 colors.xml 在values文件夹中。

2.通过xml:

对于API 21+:

<Spinner
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:backgroundTint="@color/red" />

或者如果您使用支持库,您可以使用:

<android.support.v7.widget.AppCompatSpinner
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:backgroundTint="@color/red" />

3.通过drawables:

您可以使用此在线工具: http://android-holo-colors.com

这将使用您喜欢的颜色为您想要的任何视图生成自定义drawable。确保选择微调器,然后下载资源。


84
2017-08-23 14:30



我没有 colors.xml 文件。或者我必须创建它?另外,我想在我的问题中指出,当我说的时候 通过XML,我的意思是,如果有一些选项,如 android:colorDropDownArrow 或类似的东西直接在XML中设置arrrow的值。谢谢! - Francisco Romero
不幸的是,除了使用之外,你无法从你的xml中做到这一点 机器人:背景= “@绘制/ spinnerBackground”,但这会完全改变你的微调背景。因此,您必须在名为的values文件夹中创建一个新的xml colors.xml 并添加一种称为红色的颜色。还检查我更新的答案,我已经采取了另一种方式,而不是创建 colors.xml 如果你想要那个。 - Hussein El Feky
谢谢你的更新!但我仍有疑问。如果我没有Spinner的任何背景,它只显示颜色的箭头,但如果我做了背景箭头消失了。你知道为什么吗? - Francisco Romero
如果为微调器创建背景,这意味着您将删除其默认背景,即箭头。因此,如果您想在xml中使用background属性,那么您应该采用我在答案中发布的第二种方式。该站点将生成一个zip文件,其中包含您将放入项目中的文件。该网站将向您解释。如果您需要更多帮助,请告诉我。 - Hussein El Feky
我把它标记为已被接受,因为你非常乐于助人,如果我有一些疑问,我会把它放到新的地方;) - Francisco Romero


我很惊讶没有人指出它,但你可以只是亚类 Widget.AppCompat.Spinner 并改变 backgroundTint

<style name="Spinner" parent="Widget.AppCompat.Spinner">
        <item name="backgroundTint">@color/spinnerTint</item>
</style>

并将其应用于 Spinner

<Spinner
    style="@style/Spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:spinnerMode="dropdown" />

13
2018-05-07 00:30



backgroundTint属性不仅适用于API级别21吗? - niranjan_b
@niranjan_b android:backgroundTint 是。这是AppCompat版本(注意这里没有android前缀,样式扩展了AppCompat派生的样式) - mewa
好吧!..得到它.. - niranjan_b
奇怪的行为:当我添加属性android:background时,无论我设置背景的值是什么,背景的颜色都是从backgroundTint中获取的,因此无法看到箭头。 - Zvi
@Zvi当你改变 android:background 你不再使用Android的背景可绘制,而是你定义了一个新的颜色drawable,这就是为什么你没有看到箭头 - mewa


使用backgroundTint属性

<Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/white"
        />

如果你应该使用min_SDK <21(Lollipop) AppCompatSpinner 

<android.support.v7.widget.AppCompatSpinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:backgroundTint="@color/white"
        /> 

11
2017-09-29 15:36





尝试这个:

spinner_age.getBackground().setColorFilter(ContextCompat.getColor(this,
                R.color.spinner_icon), PorterDuff.Mode.SRC_ATOP);

2
2018-06-28 06:42



它改变了背景颜色而不是箭头的颜色 - Zvi


如果 (API 21+){

你可以直接使用 android:backgroundTint="@color/color",在你的微调器内:

<Spinner
   android:id="@+id/spinner"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:backgroundTint="@color/color" />

} 其他 {

创造自己的风格:

<style name="spinner_style" parent="Widget.AppCompat.Spinner">
        <item name="backgroundTint">@color/color</item>
</style>

然后进入Spinner:

<Spinner
   android:id="@+id/spinner"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   style="@style/spinner_style"/> 

}

注意: 您可以在所有API中使用样式方法。


2
2018-04-23 13:26





<Spinner
            android:id="@+id/spinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:backgroudTint="#00000" />

0
2017-07-28 08:22