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

80

如我在问题中所写,我想要在XML中更改Spinner的下拉箭头的颜色(默认箭头,不是自定义箭头或其他东西),但问题是我找不到任何可以从XML中引用它的内容。

这是否可能?如果可以,如何更改颜色?


请查看此处的答案:https://dev59.com/pF8e5IYBdhLWcg3wRYsk - derfect
@Rayes 但这是针对自定义下拉菜单而不是默认下拉菜单。 - Francisco Romero
2
@Error404 三个月后我又遇到了同样的问题。你的采纳答案帮助我解决了这个问题。一票给你,一票给 Hussein :) - Edijae Crusar
8个回答

180

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

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);

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

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. 通过可绘制对象:

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

该工具将为您生成所需颜色的自定义可绘制对象,并确保选择下拉菜单,然后下载资源。


我没有colors.xml文件。还是说我需要创建它?另外,我想指出,在我的问题中,当我说“通过XML”时,我是指是否有一些选项,例如android:colorDropDownArrow或类似的选项,可以直接在XML中设置箭头的值。谢谢! - Francisco Romero
不幸的是,除非使用 **android:background="@drawable/spinnerBackground"**,否则您无法从xml中完成此操作,但这将完全更改您的下拉列表背景。因此,您必须在值文件夹中创建一个名为 colors.xml 的新xml,并在其中添加一个名为red的颜色。如果您想要的话,还可以检查我的更新答案,我已经提供了另一种方法,而不是创建 colors.xml - Hussein El Feky
1
如果您为Spinner创建了一个背景,则意味着您将删除其默认的背景,即一个箭头。因此,如果您想在XML中使用background属性,则应该选择我在答案中发布的第二种方式。该网站将生成一个包含您将放置在项目中的文件的zip文件。该网站会向您解释如何操作。如果您需要更多帮助,请告诉我。 - Hussein El Feky
我将其标记为已接受,因为您非常有帮助,如果我有疑问,我会发表新的评论 ;) - Francisco Romero
谢谢,如果你有任何问题,请随时问我。 :) - Hussein El Feky
显示剩余2条评论

15

我很惊讶没有人指出来,但是您可以通过继承 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" />

2
背景色调属性不是只适用于 API 级别 21 及以上吗? - niranjan_b
2
android:backgroundTint 是什么?这是 AppCompat 版本(注意这里没有 android 前缀,样式继承了一个派生自 AppCompat 的样式)。 - mewa
奇怪的行为:当我添加了属性android:background时,无论我设置什么背景值,背景的颜色都会从backgroundTint中获取,因此箭头是看不见的。 - Zvi
@Zvi 当您更改 android:background 时,您不再使用 Android 的背景可绘制对象,而是定义了一个新的颜色可绘制对象,这就是为什么您看不到箭头的原因。 - mewa
是的,当我阅读其他帖子时,我意识到了这一点。我还发现了一篇解决我的问题的帖子,方法如下:为了在不破坏可绘制对象的情况下更改背景颜色,我将下拉框放置在相对布局中并定义其背景颜色。这与您使用backgroundTint更改箭头颜色的解决方案相结合,可以完全控制两种颜色。 - Zvi

13

使用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"
        /> 

8

如果API 21+){

您可以直接在您的 Spinner 中使用 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中使用style方法。


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

仅适用于API级别高于21的版本


3

试一下这个:

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

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

2
使用this依赖项创建一个非常漂亮和易于使用的旋转器,并使用"app:arrowTint="@color/green"来更改箭头颜色。

尝试使用它,但没有显示列表。 - W.M.

0
步骤1。 使用以下方法设计自己的下拉箭头

https://icons8.com/icons/set/drop-down

第二步。使用Paint在向下箭头旁边添加一个带有黑色边框的白色框,并保存为.PNG文件。
它应该看起来像这样:

enter image description here

第三步。 将 .PNG 图像复制并粘贴到应用程序的可绘制文件夹中。

enter image description here

第四步。在activity_main.xml中,复制并粘贴以下代码:
         <TextView
            android:id="@+id/spinnersearchtext"
            android:layout_width="80dp"
            android:layout_height="40dp"
            android:layout_marginEnd="5dp"
            android:gravity="center|end"
            android:text="Search:"
            android:textColor="#FFFFFF"
            android:textSize="20dp"
            android:textStyle="bold"
            android:visibility="visible"
            app:layout_constraintEnd_toStartOf="@+id/spinner1"
            app:layout_constraintHorizontal_bias="1"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="@+id/spinner1" /> 


         <Spinner
            android:id="@+id/spinner1"
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:layout_marginLeft="50dp"
            android:background="@drawable/dropdownarrow"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

最终结果:

enter image description here


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