文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-13 05:55

关注

本节引言:

本来本节是想给大家介绍一个Gallery(画廊)的一个控件的,后来想想还是算了,因为 在Android 4.1后就已经被弃用了,尽管我们可以通过兼容不来使用Gallery,不过想想 还是算了,因为Gallery在每次切换图片的时候,都需要重新创建视图,这样无疑会造成 很大资源浪费!我们可以通过其他方法来实现Gallery效果,比如通过HorizontalScrollView 来实现水平滚动效果,或者编写一个水平方向的ListView~有兴趣自己谷歌!

本节学习的是一个叫做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

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) {    }}

 

来源地址:https://blog.csdn.net/leyang0910/article/details/131135274

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯