Android Studio开发之路(八)Spinner样式设置

一、需求

白色背景+显示下拉框按钮
在这里插入图片描述
问题:
设置Spinner的背景可以通过设置background: android:background="@color/white",但是一旦设置了这个值,右侧的下拉按钮就会消失

方法一、自定义一个style(不成功)

在drawable中添加一个spinner_style.xml,并添加以下内容,然后在布局文件中的Spinner中添加Style

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF"/> <!-- 白色背景 -->
        </shape>
    </item>
    <item android:top="-2dp" android:right="-2dp" android:bottom="-2dp">
        <bitmap android:src="@drawable/ic_dropdown" android:gravity="right|center_vertical"/> <!-- 下拉箭头 -->
    </item>
</layer-list>
<Spinner
            android:id="@+id/spinner_phone"
            android:layout_width="254dp"
            android:layout_height="30dp"
            android:entries="@array/phone"
            style="@drawable/spinner_style"
            android:spinnerMode="dropdown"/>

这里@drawable/ic_dropdown是一个下拉按钮图标,可以用自己现成的,也可以通过android image asset生成一个图标。下面是android image asset使用方法:

drawable右键->new->image asset进入下图页面,按照顺序操作,就会将下拉箭头图标保存到drawable中了。

这里是引用

但是! 这个在我这里不成功,它只显示了图标,背景没有变色

方法二、文字设置、各部分颜色设置 (不成功)

先在values->colors.xml中添加以下三个颜色:spinner_background_color、dropdown_item_selector_color、dropdown_background_color分别代表控件背景颜色、选中的项目颜色、下拉控件背景颜色

这里是引用

然后在styles.xml中添加上这三个颜色:

 <style name="spinnerColor" parent="Widget.AppCompat.Spinner">
        <item name="android:background">@color/spinner_background_color</item>
        <item name="android:dropDownSelector">@color/dropdown_item_selector_color</item>
        <item name="android:popupBackground">@color/dropdown_background_color</item>
        <item name="android:spinnerStyle">@style/Widget.AppCompat.Spinner.Underlined</item>
    </style>

然后在布局文件的Spinner的style指向它:style="@style/spinnerColor"

至于Spinner文字的设置如下:
在layout中添加一个spinner_item.xml文件,加入以下代码作为文字设置:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textStyle="normal"
android:textColor="@color/black"
 />

然后在java文件中,:

Spinner m_phoneSpinner=(Spinner)findViewById(R.id.spinner_phone);
 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
               R.array.phone, R.layout.spinner_item);
        m_phoneSpinner.setAdapter(adapter);

这里R.array.phone是下拉框各项条目,记录在strings.xml中:

<resources>
    <string name="app_name">MarkCollectionTool</string>

    <string-array name="phone">
        <item>HUAWEI-Mate60</item>
        <item>HUAWEI-Mate60pro</item>
        <item>HUAWEI-P60</item>
        <item>XIAOMI-14Ultra</item>
        <item>OPPO-FIND-N3-FLIP</item>
        <item>VIVO-X-FLOD3</item>
    </string-array>

</resources>

以上都添加了,但是依然没有改变背景颜色变化后下拉按钮消失的情况。

方法三、Spinner+imageView组合 (成功!)

直接进行Spinner的样式修改总是背景和下拉按钮不能共存,于是决定修改背景后在Spinner的上面叠加一个下拉图标,图标我就用的方法一中提到的image asset制作的图标。

<RelativeLayout
            android:layout_width="250dp"
            android:layout_height="wrap_content">

            <Spinner
                android:id="@+id/spinner_phone"
                android:layout_width="250dp"
                android:layout_height="40dp"
                android:background="@color/white"
                android:layout_centerInParent="true"

                android:entries="@array/phone">

            </Spinner>

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_spinner"
                android:background="@color/white"
                android:layout_alignParentRight="true"
                android:layout_alignTop="@id/spinner_phone"
                android:layout_centerVertical="true"/>

        </RelativeLayout>

如上述代码,将spinner和imageView用Relativelayout布局组装起来,将Relativelayout的宽度设置的与spinner宽度一样,这样的话在给imageView设置layout_alignParentRight和layout_alignTop就正好可以让imageview显示在spinner空间的上方靠右的位置。

这里是引用

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android Studio中,Spinner是一种常用的下拉列表控件,用于显示一组选项供用户选择。要设置Spinner的字体,可以通过自定义适配器来实现。 首先,在res目录下创建一个新的xml文件,例如"spinner_item.xml",用于定义Spinner中每个选项的布局。在该文件中,可以设置字体样式、大小等属性。例如,以下是一个示例的"spinner_item.xml"文件: ```xml <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:textColor="#000000" android:padding="10dp" android:fontFamily="sans-serif" android:textStyle="bold" /> ``` 接下来,在Activity中,使用自定义适配器来设置Spinner的字体。首先,创建一个适配器类继承自ArrayAdapter,并重写getView方法。在getView方法中,可以设置每个选项的字体样式。例如: ```java public class CustomAdapter extends ArrayAdapter<String> { private Context context; private String[] items; public CustomAdapter(Context context, int resource, String[] items) { super(context, resource, items); this.context = context; this.items = items; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView view = (TextView) super.getView(position, convertView, parent); view.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/your_font.ttf")); return view; } } ``` 在上述代码中,通过调用setTypeface方法设置字体样式,其中"your_font.ttf"是你自定义的字体文件名。 最后,在Activity中使用自定义适配器来设置Spinner的数据源和样式。例如: ```java Spinner spinner = findViewById(R.id.spinner); String[] items = {"Option 1", "Option 2", "Option 3"}; CustomAdapter adapter = new CustomAdapter(this, android.R.layout.simple_spinner_item, items); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); ``` 以上就是在Android Studio设置Spinner字体的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值