当前位置:

首页 > 系统应用 > 2.5.3 Spinner(列表选项框)的基本使用

2.5.3 Spinner(列表选项框)的基本使用

本节引言: 原本这节是打算介绍一个Gallery(画廊)控件的,不过后来还是决定不展开讲了。原因很直接:从Android 4.1开始,它就已经被弃用了。虽然通过兼容方式依然可以继续使用Gallery,但意义其实不大,因为它在每次切换图片时都要重新创建视图,这种做法显然会带来不小的资源浪费。真想实现类

本文目录

    本节引言:

    原本这节是打算介绍一个Gallery(画廊)控件的,不过后来还是决定不展开讲了。原因很直接:从Android 4.1开始,它就已经被弃用了。虽然通过兼容方式依然可以继续使用Gallery,但意义其实不大,因为它在每次切换图片时都要重新创建视图,这种做法显然会带来不小的资源浪费。真想实现类似Gallery的效果,办法并不少,比如用HorizontalScrollView来做水平滚动,或者自己写一个水平方向的ListView。感兴趣的话,可以自己去Google了解一下。

    本节学习的是一个叫做Spinner的Adapter控件! 应用场景:当我们的app需要用户输入数据时,除了让用户自己打字以外,还有一种比较贴心的设计: 列出一组选项让用户从中挑选,从而方便了我们的用户! 话不多说,开始学习Spinner的基本用法~

    1.相关属性

    • android:dropDownHorizontalOffset:设置列表框的水平偏移距离
    • android:dropDownVerticalOffset:设置列表框的水平竖直距离
    • android:dropDownSelector:列表框被选中时的背景
    • android:dropDownWidth:设置下拉列表框的宽度
    • android:gravity:设置里面组件的对其方式
    • android:popupBackground:设置列表框的背景
    • android:prompt:设置对话框模式的列表框的提示信息(标题),只能够引用string.xml 中的资源id,而不能直接写字符串
    • android:spinnerMode:列表框的模式,有两个可选值: dialog:对话框风格的窗口 dropdown:下拉菜单风格的窗口(默认)
    • 可选属性:android:entries:使用数组资源设置下拉列表框的列表项目

    2.使用示例:

    顺带提一句,Spinner 默认会选中第一项,也就是会自动调用 spinner.setSection(0)。如果需要改默认选中项,可以从这里下手。不过这里还有个容易踩到的点:它会顺带触发一次 OnItemSelectedListener 事件。这个问题目前还没有更理想的处理办法,比较常见的折中方式是加一个 boolean 变量,先设为 false;等进入 onItemSelected 时先做判断,false 说明这次是默认触发,不执行实际操作,同时把 boolean 改成 true;如果已经是 true 了,再按正常逻辑响应事件。示例里还准备了两个不同的 Spinner,方便从数据源、列表框样式等方面做个对比。接着往下看。

    效果图:

    代码实现:

    这里依然使用的我们前面的可复用BaseAdapter:

    第一个Spinner的数据源编写:

    在res/values下编写一个:myarrays.xml的文件,内容如下:

    
    
        
            英勇青铜
            不屈白银
            荣耀黄金
            华贵铂金
            璀璨钻石
            超凡大师
            最强王者
        
    

    接着是第二个Spinner的布局:item_spin_hero.xml:

    
    
    
    
    

    再接着编写一个Entitiy实体类:Hero.java:

    /**
     * Created by Jay on 2015/9/24 0024.
     */
    public class Hero {
    private int hIcon;
        private String hName;
    public Hero() {
        }
    public Hero(int hIcon, String hName) {
            this.hIcon = hIcon;
            this.hName = hName;
        }
    public int gethIcon() {
            return hIcon;
        }
    public String gethName() {
            return hName;
        }
    public void sethIcon(int hIcon) {
            this.hIcon = hIcon;
        }
    public void sethName(String hName) {
            this.hName = hName;
        }
    }

    最后是MainActivity的布局与Java代码部分:

    布局文件:activity_main.xml:

    
    
    
    
    
    

    MainActivity.java:

    public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
    private Spinner spin_one;
        private Spinner spin_two;
        private Context mContext;
        //判断是否为刚进去时触发onItemSelected的标志
        private boolean one_selected = false;
        private boolean two_selected = false;
        private ArrayList mData = null;
        private BaseAdapter myAdadpter = null;
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mContext = MainActivity.this;
            mData = new ArrayList();
            bindViews();
        }
    private void bindViews() {
            spin_one = (Spinner) findViewById(R.id.spin_one);
            spin_two = (Spinner) findViewById(R.id.spin_two);
    mData.add(new Hero(R.mipmap.iv_lol_icon1,"迅捷斥候:提莫(Teemo)"));
            mData.add(new Hero(R.mipmap.iv_lol_icon2,"诺克萨斯之手:德莱厄斯(Darius)"));
            mData.add(new Hero(R.mipmap.iv_lol_icon3,"无极剑圣:易(Yi)"));
            mData.add(new Hero(R.mipmap.iv_lol_icon4,"德莱厄斯:德莱文(Draven)"));
            mData.add(new Hero(R.mipmap.iv_lol_icon5,"德邦总管:赵信(XinZhao)"));
            mData.add(new Hero(R.mipmap.iv_lol_icon6,"狂战士:奥拉夫(Olaf)"));
    myAdadpter = new MyAdapter(mData,R.layout.item_spin_hero) {
                @Override
                public void bindView(ViewHolder holder, Hero obj) {
                    holder.setImageResource(R.id.img_icon,obj.gethIcon());
                    holder.setText(R.id.txt_name, obj.gethName());
                }
            };
            spin_two.setAdapter(myAdadpter);
            spin_one.setOnItemSelectedListener(this);
            spin_two.setOnItemSelectedListener(this);
    }
    @Override
        public void onItemSelected(AdapterView parent, View view, int position, long id) {
            switch (parent.getId()){
                case R.id.spin_one:
                    if(one_selected){
                        Toast.makeText(mContext,"您的分段是~:" + parent.getItemAtPosition(position).toString(),
                                Toast.LENGTH_SHORT).show();
                    }else one_selected = true;
                    break;
                case R.id.spin_two:
                    if(two_selected){
                        TextView txt_name = (TextView) view.findViewById(R.id.txt_name);
                        Toast.makeText(mContext,"您选择的英雄是~:" + txt_name.getText().toString(),
                                Toast.LENGTH_SHORT).show();
                    }else two_selected = true;
                    break;
            }
        }
    @Override
        public void onNothingSelected(AdapterView parent) {
    }
    }

    另外关于Spinner的OnItemSelectedListener,以及如何获得选中项的值,就自己看上面的 代码啦~

    3.代码示例下载:

    SpinnerDemo.zip

    本节小结

    好的,本节给大家介绍了Spinner(下拉选项框)的使用,例子还是蛮有趣的,哈哈~! 别问我哪个区什么段位,我可是人机小王子,可惜一直在青铜分段苦苦挣扎~ 你知道为什么的,好吧,本节就到这里~

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    系统应用
    相关文章 更多
    Spine 2D怎么导出GIF动图 Spine导出设置操作方法【技巧】
    Spine 2D怎么导出GIF动图 Spine导出设置操作方法【技巧】

    想要在Spine里导出一张既清晰又能无限循环的GIF动图,还真不是点一下“导出”就完事的活儿。帧率、导出范围、循环标记、尺寸和压缩参数,这几样东西得同时管好,缺一个都可能翻车。 说白了,高质量可循环GIF的导出,就是一个“参数联调”的过程。下面把每个关键步骤拆开聊聊,照着做基本不会出问题。 确认动画

    Yandex官网入口及最新搜索平台访问方式
    Yandex官网入口及最新搜索平台访问方式

    Yandex搜索平台最新访问入口是https://www.yondex.net/,该网站界面简洁,支持多语言切换和智能提示,具备强大的自然语言处理与多样化内容检索功能,并集成翻译、云存储、邮件等附加服务。

    Yandex搜索引擎官网入口及登录教程
    Yandex搜索引擎官网入口及登录教程

    俄罗斯Yandex搜索引擎创建于1993年,是俄语区主导的搜索服务,官网为https://www.yondex.net/,用户可直接访问并切换语言,无需注册即可使用其搜索、地图、邮箱等集成服务。

    Yandex浏览器官网登录与在线体验入口
    Yandex浏览器官网登录与在线体验入口

    Yandex浏览器官方网站登录入口是https://www.yondex.net/,提供多语言下载、账户同步、广告拦截、Turbo模式及隐私保护等功能,支持跨设备数据同步与安全浏览。

    2026年AO3镜像最新地址及稳定入口
    2026年AO3镜像最新地址及稳定入口

    ao3镜像2026最新入口包括主站archiveofourown.org、镜像站ao3mirror.com和xiaozhan.icu,建议收藏备用并根据网络情况切换使用。

    Win10搜索不到蓝牙耳机的排查与连接方法
    Win10搜索不到蓝牙耳机的排查与连接方法

    面向在Windows 10系统中无法发现蓝牙耳机的用户,本文提供从耳机配对模式到系统设置的完整排查路径。首先确保耳机已充电并进入可被搜索的配对状态,断开与其他设备的连接;随后在Win10设置中开启蓝牙并添加设备。若蓝牙开关缺失或适配器异常,需通过设备管理器检查驱动状态并更新,以恢复正常的蓝牙音频设备识别功能。

    Win10蓝牙耳机麦克风没声音?检查输入设备与权限设置
    Win10蓝牙耳机麦克风没声音?检查输入设备与权限设置

    面向在Windows 10系统中遇到蓝牙耳机能听声但无法录音的用户,本文解决因输入通道选择错误、隐私权限关闭或语音连接缺失导致的麦克风无声问题。关键步骤包括:在系统声音设置中正确选择Headset Microphone或Hands-Free AG Audio作为输入设备;在隐私设置中开启应用访问麦克风权限;确认蓝牙状态包含语音连接而非仅音乐连接,必要时重新配对或更新驱动。注意Stereo模式不支持麦克风输入,勿为音质牺牲通话功能。

    Win11打开服务管理器的两种方法:运行命令与计算机管理
    Win11打开服务管理器的两种方法:运行命令与计算机管理

    面向需要在Windows 11中查看或配置系统服务的用户,本文提供两种快速进入服务管理器的路径。一是通过Win+R运行services.msc直接打开,适合快速访问;二是从开始菜单进入计算机管理,再展开服务和应用程序找到服务列表,适合在统一管理界面中操作。文中说明查看状态通常无需特殊权限,而修改服务设置可能需要管理员账户,帮助用户根据实际需求选择合适入口。

    fences怎么彻底删除 清理残留文件
    fences怎么彻底删除 清理残留文件

    想知道Fences怎么彻底删除?本教程详解Windows 11下卸载Fences、使用官方Purge工具清理残留、删除布局备份及日志的步骤,助您干净移除软件并恢复桌面原生体验。

    Win11打开组策略的命令及家庭版无法使用说明
    Win11打开组策略的命令及家庭版无法使用说明

    面向需要在Windows 11中调整系统设置的用户,介绍通过运行命令gpedit.msc快速打开本地组策略编辑器的方法。该功能仅内置于专业版、企业版和教育版,家庭版通常不包含此工具,运行报错并非系统故障。本文详解正确的命令输入格式、界面确认方式以及通过任务栏搜索的替代路径,并指导家庭版用户如何查看系统版本以选择对应的设置入口或升级方案。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。