android如何创建spinner组件,Andriod开发之下拉列表控件(Spinner)的用法

Spinner是Android的下拉列表控件,今天对这个控件进行了学习,发现该控件比其它简单控件使用起来稍微复杂,特地将Spinner控件的使用方法以及注意事项记录下来,以备后用。

Spinner控件在Android中的继承结构如下:

java.lang.Object

↳ android.view.View

↳ android.view.ViewGroup

↳ android.widget.AdapterView

↳ android.widget.AbsSpinner

↳ android.widget.Spinner

由此可见,Spinner的继承结构比较复杂,在继承树中有AdapterView,这是比较重要的一项,因为我们就是通过Adapter来为Spinner设置下拉列表项的。 Spinner的重点问题就是下拉列表项的配置,通过之前组件的了解,我们知道资源组件的配置有两种方式,一种是通过XML文件来配置,一种是通过程序来配置。而从Spinner的文档中,我们可以看到,对它的配置需要使用Adapter类的实现。

下面分别对两种方式配置Spinner控件的列表项进行介绍。

一. XML方式配置Spinner列表项

首先给出一个主视图的XML布局代码:

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical" >

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="收入类别:"

android:id="@+id/textView" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:entries="@array/arr_incomeType"

android:prompt="@string/incomeType_prompt"

android:id="@+id/spinner_incomeType" />

这段代码定义了一个TextView控件和Spinner控件,Spinner控件指定了entries属性为一个字符串数组,对应的ID为arr_incomeType,这个数组被定义在一个名为arrays.xml的资源文件中:

47445fe6737d994e0f16e8cbed38e576.png

arrays.xml的内容如下:

上班收入

礼尚往来

意外收入

其它收入

这样,Spinner就定义完成了,下面我们看看Activity类的实现代码:

package com.example.myapplication2.app;

import android.app.Activity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.Spinner;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main_activity);

}

}

这个Activity类重载了onCreate方法,在其中指定了Activity对应的布局文件,最终的运行效果如下:

75a10956a7bdcd47ad1cae0b15543548.png

二. 使用程序实现Spinner的列表项

下面我们看看如何通过程序来控制Spinner和列表项,之前说过要使用程序,就要用到Adapter类,下面我们介绍这种方法实现Spinner的下拉列表。主视图布局XML文件Spinner相关的布局代码如下:

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical" >

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="收入类别:"

android:id="@+id/textView" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:prompt="@string/incomeType_prompt"

android:id="@+id/spinner_incomeType" />

和前面相比,我们去掉了Spinner的android:entries属性定义,我们在程序中完成这项工作。和第一种方式一样,我们在arrays.xml文件中定义id为arr_incomeType的数组,下面是我们Activity类对应的实现代码:

package com.example.myapplication2.app;

import android.app.Activity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.Spinner;

public class MainActivity extends Activity {

private Spinner incomeType;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main_activity);

// 建立数据源

String[] mItems = getResources().getStringArray(R.array.arr_incomeType);

incomeType = (Spinner)this.findViewById(R.id.spinner_incomeType);

// 建立Adapter并且绑定数据源

ArrayAdapter _Adapter=new ArrayAdapter(this,R.layout.simple_spinner_item, mItems);

//绑定 Adapter到控件

incomeType.setAdapter(_Adapter);

}

}

这次我们通过字符串数组构造了一个ArrayAdapter,并使用Spinner类的setAdapter方法将这个ArrayAdapter与Spinner控件关联,实现的效果与方案一一样。

注意:我们构造数组使用了getResources().getStringArray()方法,该方法可以直接从资源文件加载数组对象。

ArrayAdapter构造函数的第一个参数是上下文,直接指定当前的Activity即可,第二个参数是一个布局对象,指定了列表项的布局方式,第三个参数是包含列表项内容的数组对象。

ArrayAdapter构造函数的第二个参数你可以使用android系统提供的布局对象,如android.R.layout.simple_spinner_item,也可以使用自定义的布局对象,本例使用的布局对象定义在一个名为simple_spinner_item.xml文件中定义的布局对象,该文件的内容如下:

android:id="@android:id/text1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="bottom"

android:height="35dp"/>

这个布局非常简单,没有太多可以介绍的内容。

到此,Android的Spinner用法就基本介绍完了,感兴趣的朋友欢迎补充^_^

【发表评论0条 】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

恒生与中国信通院联合发布《证券行业分布式核心系统SRE运维白皮书》

在互联网金融模式的变革和冲击下,金融机构面临着海量客户管理、业务场景快速增长、金融服务和产品多样化等挑战。 为应对不断增加的技术创新需求,证券行业核心系统正逐步从传统IT集约型架构向支持敏捷开发、弹性扩容、智能灵活的分布式架构转型&#xff…

媒体声音 | 阿里云王伟民:阿里云数据库的策略与思考

简介:DTCC 2021大会上,阿里云数据库事业部 产品与解决方案部总经理 王伟民(花名:唯敏)发表主题演讲《云原生数据库2.0,一站式全链路数据管理与服务》,并接受IT168企业级&ITPUB执行总编 老鱼…

阿里云云治理中心正式上线,助力企业快速云落地

简介:2021年11月1日,阿里云"云治理中心"(Cloud Governance Center)产品正式上线,云治理中心是基于企业IT治理的最佳实践,帮助客户快速搭建业务上云的标准Landing Zone(上云登陆区)&am…

超值一篇分享,Docker:从入门到实战过程全记录

作者 | 天元浪子来源 | CSDN博客和Docker相关的概念想要真正理解Docker,就不得不从虚拟化技术的发展历程说起。普遍认为虚拟化技术经历了物理机时代、虚拟机时代,目前已经进入到了容器化时代。可以说,Docker是虚拟化技术不断发展的必然结果。…

linux phpunit 安装,在CentOS 7/CentOS 8系统中安装PHPUnit的方法

本文介绍在CentOS 7/CentOS 8操作系统中安装PHPUnit的方法,只需要运行几个命令就可以了,非常的简单。PHPUnit是PHP应用程序的单元测试框架,它是单元测试框架的xUnit体系结构的一个实例,它在JUnit中很受欢迎,PHPUnit需要…

解读如何安全快速建立IT治理环境

简介:云计算经过十多年的发展,从基础的IAAS,大数据,到各种的PaaS有丰富的产品和生态,非常有效地助力了业务增长和技术创新,并提高了业务的效率。最直观的感受是过去需要几天到一个月的资源交付,…

com+ system application 启动_dubbo启动引导过程(基于2.7.9)

前言再百度或google上一搜索dubbo服务暴露过程 相关的文章已经有很多了,但是文章基本都是基于老版本的dubbo,当你对着文章去看下载下来的代码时,会发现很多东西对不上;出于此目的,我便有了自己根据新版本(就…

函数计算 GB 镜像秒级启动:下一代软硬件架构协同优化

简介:本文将介绍借助函数计算下一代 IaaS 底座神龙裸金属和安全容器,进一步降低绝对延迟且能够大幅降低冷启动频率。 作者:修踪 背景 函数计算在 2020 年 8 月创新地提供了容器镜像的函数部署方式。AWS Lambda 在 2020 年 12 月 Re-Invent…

为什么服务端程序都需要先 listen 一下?

作者 | 张彦飞allen来源 | 开发内功修炼大家都知道,在创建一个服务器程序的时候,需要先 listen 一下,然后才能接收客户端的请求。例如下面的这段代码我们再熟悉不过了。int main(int argc, char const *argv[]) {int fd socket(AF_INET, SOC…

10个Bug环环相扣,你能解开几个?

简介:由阿里云云效主办的2021年第3届83行代码挑战赛已经收官。超2万人围观,近4000人参赛,85个团队组团来战。大赛采用游戏闯关玩儿法,融合元宇宙科幻和剧本杀元素,让一众开发者玩得不亦乐乎。 今天请来决赛赛题设计者…

小小智慧树机器人_国网营业厅“AI新势力”,科沃斯商用机器人解锁智慧服务新模式!...

智慧营业厅新格局,AI机器人成标配?AI加持,万物互联、万物智能。2019年,应用人工智能的门槛下降,大量人工智能催生的新产品、服务和最佳实践轮番出现。人工智能正在重塑各行各业,传统营业厅网点该如何搭上AI…

AIoT时代存储如何升级?长江存储发布高速闪存芯片UFS 3.1

2022年4月19日,长江存储科技有限责任公司(简称“长江存储”)宣布推出UFS 3.1通用闪存——UC023。这是长江存储为5G时代精心打造的一款高速闪存芯片,可广泛适用于高端旗舰智能手机、平板电脑、AR/VR等智能终端领域,以满…

零信任策略下云上安全信息与事件管理实践

简介:随着企业数字化转型的深入推进,网络安全越来越被企业所重视。为了构建完备的安全防御体系,企业通常会引入了防火墙(Firewall)、防病毒系统(Anti-Virus System,AVS)、入侵防御系统(Intrusion Prevention System,IP…

kl散度度量分布_数据挖掘比赛技巧——确定数据同分布

在数据挖掘比赛中,很重要的一个技巧就是要确定训练集与测试集特征是否同分布,这也是机器学习的一个很重要的假设[1]。但很多时候我们知道这个道理,却很难有方法来保证数据同分布,这篇文章就分享一下我所了解的同分布检验方法。封面…

Inclavare Containers:云原生机密计算的未来

简介:本文为你详细的梳理一次 Inclavare Containers 项目的发展脉络,解读它的核心思想和创新技术。 作为业界首个面向机密计算场景的开源容器运行时,Inclavare Containers 项目于 2020 年 5 月开源,短短一年多时间内发展势头非常迅…

没有操作系统程序可以运行起来吗?

作者 | 陆小风来源 | 码农的荒岛求生现在的程序员对操作系统已经习以为常了,但是你有没有想过,如果没有操作系统的话我们可以让程序运行起来吗?先说答案,当然是可以的,而且必须是可以的。你可以从这个角度来思考&#…

sysAK(青囊)系统运维工具集:如何实现高效自动化运维?| 龙蜥技术

简介:What is sysAK、典型工具介绍、开源 3 方面介绍了 sysAK 系统,目前 sysAK 工具集已经在龙蜥社区开源,并且在系统运维 SIG、跟踪诊断 SIG 一起共建,希望大家后期加入 SIG 一起讨论共建。 编者按:本文整理自「云栖…

quill鼠标悬浮 出现提示_CHERRY MC8.1鼠标评测:超前设计延续军火箱信仰

CHERRY作为机械键盘品牌拥有非常高的知名度,许多朋友的第一把机械键盘就是CHERRY品牌。在CHERRY产品线中,最具信仰的一定是军火箱MX8.0键盘。键盘本身手感颜值俱佳,独特的军火箱包装更是收获了大批粉丝。至于最配这把键盘的鼠标却一直让网友们…

高并发IO的底层原理

作者 | 阿辉来源 | Andy阿辉思考:作为程序员的我们,在编写软件进行文件读取,网络收发数据时,是不关心其具体的内部数据传输的。只关心把数据传输到缓冲区或及时从缓冲区读取数据。那么内部究竟是如何实现的呢,今天这篇…

新能源汽车太猛了,这些卡脖子技术你了解吗?

简介:从汽车行业的变化,我们即可初步看出芯片的重要性,那么,芯片对汽车行业的发展具体有哪些重要影响呢? 根据全球汽车咨询机构Auto Forecast Solutions统计的数据,截至10月10日,由于芯片短缺&…