2-5-2 Spinner

标注:本文为个人整理,仅做自己学习参考使用,请勿转载和转发
2018-06-20: 初稿。参考博主coder-pig

0. 引言

  • 这个Spinner是Adapter的控件,表示列表选相框,主要的应用场景为:当我们的app需要用户输入数据时,除了让用户自己打字以外,还有一种比较贴心的设计,勒出一组选项让用户挑选,用来方便用户,这个就是Spinner的基本用法

1. 基本属性

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

2. 使用示例

  • Spinner会默认选中第一个值,就是默认调用spinner的第一个值,spinner.setSection(0),可以通过这个设置默认的选中值,另外会触发一个OnItemSelectedListener事件,暂时没有找到方法,下面的折衷的处理的方法:添加一个bollean值,然后设置为flase,在onItemSelected时进行判断,false说明是默认触发的,不做任何操作,将boolean值设置为true;true的话则正常触发事件!示例中写了两个不同的Spinner,从数据源,列表风格等进行对比
    效果图
    2-5-2 Spinner_第1张图片

    代码实现:
  • 这里依然使用的我们前面的可复用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) {

    }
}

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

3.代码示例下载:

SpinnerDemo.zip

你可能感兴趣的:(2-5-2 Spinner)