【问题标题】:How to set dropdown arrow from drawable in spinner?如何从微调器中的drawable设置下拉箭头?
【发布时间】:2020-02-24 20:49:51
【问题描述】:

我正在尝试将可绘制对象设置为 Spinner 中的箭头,但不支持位图。

我使用了svg文件(ic_arrow.xml)并将其设置在spinner_arrow.xml文件中:

<layer-list  xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <padding
                android:left="4dp"
                android:top="4dp"
                android:right="4dp"
                android:bottom="4dp"
                />

            <solid android:color="@color/white" />
            <stroke android:width="2px" android:color="@color/grey" />
            <corners android:radius="5dp" />
        </shape>
    </item>
    <item>
        <bitmap android:gravity="center|right" android:src="@drawable/ic_arrow"/>
    </item>
</layer-list>

所以我在布局文件中使用它作为背景

<Spinner
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@drawable/spinner_arrow"/>

但我在显示 Spinner 时出错:“在 myapp:layout/activity_registration_driver 中的二进制 XML 文件第 41 行:错误膨胀类 Spinner”。

我认为问题在于在微调器中添加可绘制箭头,但我不知道如何解决它

【问题讨论】:

标签: java android spinner drawable


【解决方案1】:

请使用以下代码添加带有微调器的箭头:

<RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="@dimen/btn_height_common"
                android:layout_marginLeft="@dimen/_15sdp"
                android:layout_marginTop="@dimen/_5sdp"
                android:layout_marginRight="@dimen/_15sdp"
                android:background="@drawable/bg_editext">

                <Spinner
                    android:id="@+id/sp_gender"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@null"
                    android:entries="@array/gender"
                    android:fontFamily="@font/gotham_narrow_book"
                    android:overlapAnchor="false"
                    android:paddingLeft="@dimen/_10sdp"
                    android:paddingRight="@dimen/_10sdp"
                    android:textColor="@color/gray_text_color"
                    android:textSize="@dimen/normal_textsize" />

                <ImageView
                    android:layout_width="@dimen/_15sdp"
                    android:layout_height="@dimen/_15sdp"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="@dimen/_15sdp"
                    android:padding="@dimen/_2sdp"
                    android:src="@mipmap/ic_down_gray" />

            </RelativeLayout>

输出:

【讨论】:

    【解决方案2】:

    基本上需要为微调器创建自定义背景。它应该是这样的:spinner_background.xml

    <item>
    
        <layer-list>
    
            <item>
                <color
                    android:color="@android:color/white"/>
            </item>
    
            <item>
                <bitmap
                    android:gravity="center_vertical|right"
                    android:src="@drawable/ic_arrow_drop_down_black_24dp"/>
            </item>
    
        </layer-list>
    
    </item>
    

    然后为您的微调器创建一个自定义样式,在其中将上述选择器指定为背景:

    <style name="Widget.App.Spinner" parent="@style/Widget.AppCompat.Spinner">
        <item name="overlapAnchor">true</item>
        <item name="android:background">@drawable/spinner_background</item>
    </style>
    

    最后,在你的应用主题中,如果你希望它被应用到你的应用中,你应该覆盖两个属性:

    <item name="spinnerStyle">@style/Widget.App.Spinner</item>
    <item name="android:spinnerStyle">@style/Widget.App.Spinner</item>
    

    【讨论】:

    • 我在style.css 中创建了自定义样式并覆盖了这两个属性但同样的错误
    • 如果我将 android:backgroundspinner_arrow 更改为 ic_arrow 它可以工作,但适用于所有微调器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    相关资源
    最近更新 更多