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

embedded/2024/9/22 22:10:16/

一、需求

白色背景+显示下拉框按钮
在这里插入图片描述
问题:
设置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>
<Spinnerandroid: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制作的图标。

<RelativeLayoutandroid:layout_width="250dp"android:layout_height="wrap_content"><Spinnerandroid: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><ImageViewandroid: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空间的上方靠右的位置。

这里是引用


http://www.ppmy.cn/embedded/18846.html

相关文章

算法和数据结构4.23:

1.测试工程师算法总结&#xff1a; L1排序和查找算法&#xff1a; 复杂度分析 查找算法&#xff1a;顺序查找、二分查找、其他查找算法 排序算法&#xff1a;冒泡排序、快速排序、其他排序算法 L2数据结构-线性表&#xff1a;链表、栈、队列、堆 L3数据结构-非线性表&…

Linux内核驱动开发-006内核定时器

1驱动程序 /*************************************************************************> File Name: timer.c> Author: yas> Mail: rage_yashotmail.com> Created Time: 2024年04月23日 星期二 19时20分42秒*************************************************…

组合模式(Composite)

组合模式(Composite) 文章目录 组合模式(Composite)什么是组合模式通过示例了解组合模式 什么是组合模式 组合模式(Composite),将对象组合成树形结构以表示部分-整体的层次结构。组合模式使得用户对单个对象和组合对象 的使用具有一致性 Component:组合中的对象声明接口&#x…

pytest系列——allure之在测试用例添加标题(@allure.title())

前言 通过使用装饰器allure.title可以为测试用例自定义一个更具有阅读性的易读的标题。 allure.title的三种使用方式&#xff1a; 直接使用allure.title为测试用例自定义标题&#xff1b;allure.title支持通过占位符的方式传递参数&#xff0c;可以实现测试用例标题参数化&a…

第六十二章 IIS 7 或更高版本的替代选项 (Windows) - 替代选项 4:将 CGI 模块与 NSD 结合使用

文章目录 第六十二章 IIS 7 或更高版本的替代选项 (Windows) - 替代选项 4&#xff1a;将 CGI 模块与 NSD 结合使用替代选项 4&#xff1a;将 CGI 模块与 NSD 结合使用 (nph-CSPcgi*.exe)启用 CGI 模块 第六十二章 IIS 7 或更高版本的替代选项 (Windows) - 替代选项 4&#xff…

Centos7.9系统MySQL5.7.32升级为5.7.44(生成环境操作)

1.背景 由于客户进行等保漏扫和渗透&#xff0c;生成环境mysql数据库被扫描出了 高危漏洞。 如图&#xff1a;部分漏洞 查看漏洞详细信息&#xff0c;建议升级到指定版本解决&#xff1a; 说明&#xff1a; 本文仅适合使用当前数据库为 RPM 安装方式 2.升级前准备 查看环…

计算机网络——GBN协议实现

实验目的 编程模拟实现GBN可靠传输软件 实验内容 C 程序模拟实现Go-Back-N可靠数据传输&#xff0c;需要编写一个发送端程序和一个测试端程序来模拟传输过程 具体流程 1. 编写发送端程序&#xff0c;调用库实现socket连接&#xff0c;然后主要实现滑动窗口&#xff0c;接收…

使用 Dify 和 Moonshot API 构建你的 AI 工作流(一):让不 AI 的应用 AI 化

有了之前的文章铺垫&#xff0c;这篇文章开始&#xff0c;我们聊聊如何折腾 AI 工作流&#xff0c;把不 AI 的应用&#xff0c;“AI 起来”。 写在前面 上个月&#xff0c;我们聊过了《使用 Dify 和 AWS Bedrock 玩转 Anthropic Claude 3》&#xff0c;里面介绍了如何使用交互…