在Android中的下拉菜单(Spinner)中设置背景颜色、边框和箭头图标。

4

我希望创建一个白底黑边的旋转器,带有箭头图标(如果可能的话不使用图片)。

但是当我使用以下代码时,旋转器显示白色背景和黑色边框,但不显示箭头图标。

 <Spinner
    android:id="@+id/spinner"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1.5" 
    android:background="@drawable/txtbox_row_border"
    android:spinnerMode="dropdown"
     >
</Spinner>

txtbox_row_border.xml 代码

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#FFFFFF" />
<stroke
    android:width="1dp"
    android:color="#515151" />
</shape>

当我使用以下代码时,旋转器将显示箭头图标,但背景为灰色。
 <Spinner
    android:id="@+id/spinner"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1.5" 
    android:background="@android:drawable/btn_dropdown" 
    android:spinnerMode="dropdown" >
</Spinner>

我该如何在一段代码中实现所有需求? 提前感谢。

2
https://dev59.com/hGgu5IYBdhLWcg3wpYYj - IntelliJ Amiya
这是我实现的第一件事。当我使用android:background="@color/white"时,箭头图标变得不可见。 - Suniel
1
你可以在这里找到答案,两个问题是相同的。 - Rahul Chaudhary
谢谢。经过一些定制,它现在可以工作了。 - Suniel
3个回答

1
你可以使用create one方法来编程地更改旋转器边框。
 public static GradientDrawable backgroundWithBorder(int bgcolor,
            int brdcolor) {

        GradientDrawable gdDefault = new GradientDrawable();
        gdDefault.setColor(bgcolor);
        gdDefault.setStroke(2, brdcolor);
        gdDefault.setCornerRadii(new float[] { radius, radius, 0, 0, 0, 0,
                radius, radius });

        return gdDefault;

}

然后设置为


act_delivery_address_type_spn.setBackground(Methods
                .backgroundWithBorder(getResources()
                        .getColor(R.color.txt_white),
                        getResources().getColor(R.color.border_gray)));

使用此方法设置背景和边框。 要创建箭头图标,请使用自定义下拉菜单。


这对我来说是一个起点。它本身并不起作用,但当我从下拉列表中获取所选视图,并从那里设置背景时,它就可以工作了。这就是我所做的:spinners[y].getSelectedView().setBackground(backgroundWithBorder(colorBackground, colorBorder)); - Peter Griffin

0

1 - 创建一个 custom_spinner.xml 文件。

2 - 在 "custom_spinner.xml" 中设置一个 TextView,并配置所有你想要的内容。

<?xml version="1.0" encoding="utf-8"?>

   <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/text1"
        style="?android:attr/spinnerItemStyle"
        android:singleLine="true"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:soundEffectsEnabled="true"
        android:background="#000000"
        android:ellipsize="marquee"
        android:textColor="@color/textWhite"

        android:drawableRight="@drawable/ic_keyboard_arrow_right_black_24dp"

        android:textAlignment="inherit"/>

0

试试这个...

styles.xml 中创建一个新的样式。

<style name="spinner_style">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:background">@drawable/border</item>
        <item name="android:layout_margin">10dp</item>
        <item name="android:paddingLeft">8dp</item>
        <item name="android:paddingRight">8dp</item>
        <item name="android:paddingTop">5dp</item>
        <item name="android:paddingBottom">5dp</item>
        <item name="android:popupBackground">#DFFFFFFF</item>
    </style>

在drawable文件夹下创建border.xml文件以创建边框形状。
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#FFFFFF" />
    <stroke
        android:width="1dp"
        android:color="#515151" />
</shape>

而旋转器将会是这样的

将样式应用于线性布局

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/spinner_style">

        <Spinner
            android:id="@+id/spinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:spinnerMode="dropdown" >
        </Spinner>

    </LinearLayout>

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