zoukankan      html  css  js  c++  java
  • android学习---Spinner

    Spinner

      Spinner是一个列表选择框,会在用户选择后,展示一个列表供用户进行选择。Spinner是ViewGroup的间接子类,它和其他的Android控件一样,数据需要使用Adapter进行封装。

      下面介绍一下Spinner的常用XML属性,Android也为其属性提供了相应的getter、setter方法:

    • android:spinnerMode:列表显示的模式,有两个选择,为弹出列表(dialog)以及下拉列表(dropdown),如果不特别设置,为下拉列表。。
    • android:entries:使用<string-array.../>资源配置数据源。
    • android:prompt:对当前下拉列表设置标题,仅在dialog模式下有效。传递一个“@string/name”资源,需要在需要在资源文件中定义<string.../>。

      作为一个列表选择控件,Spinner具有一些选中选项可以触发的事件,但它本身没有定义这些事件,均继承自间接父类AdapterView。Spinner支持的几个常用事件有以下几个:

    • AdapterView.OnItemCLickListener:列表项被点击时触发。
    • AdapterView.OnItemLongClickListener:列表项被长按时触发。
    • AdapterView.OnItemSelectedListener:列表项被选择时触发。

      PS:因为适配器可以设置各种不同的样式,有选择、单选、多选,所以OnItemCLickListener和OnItemSelectedListener是适用于不同场景的。

    Spinner的数据绑定

      对于Spinner展示的数据源,一般使用两种方式设定数据:

    • 通过XML资源文件设置,这种方式比较死板,但是如果仅仅需要展示固定的、简单的数据,这种方式还是可以考虑的,比较直观。
    • 使用Adapter接口设置,这是最常见的方式,动态、灵活,可以设定各种样式以及数据来源。

      先来讲讲通过XML资源文件设置Spinner数据的方式,首先需要在/res/values目录下新建XML格式的资源文件,名字不重要,但是一般会使用strings.xml。在其中的<resourse.../>标签下,定义<string-array.../>标签,通过它中的<item.../>标签来设置选择数据。

      XML文件结构:

      <resource>

        <string-array name="arrayname">

          <item>item1</item>

          <item>item2</item>

          <item>item3</item>

        </string-array>

      <resource>

      下面通过一个示例,讲解一下上面说的属性、事件,以及使用ArrayAdapter和XML资源文件设定简单数据,代码中注释已经说的很清楚了,这里就不再累述了。

    实现代码:

    package com.leaf.android;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.animation.Animation;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Spinner;
    import android.widget.TextView;
    
    public class Main extends Activity {
        /** Called when the activity is first created. */
    
        private List<String> list = new ArrayList<String>();
        private TextView myTextView;
        private Spinner mySpinner;
        private ArrayAdapter<String> adapter;
        private Animation myAnimation;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            // 第一步:添加一个下拉列表项的list,这里添加的项就是下拉列表的菜单项
            list.add("北京");
            list.add("上海");
            list.add("深圳");
            list.add("南京");
            list.add("重庆");
            myTextView = (TextView) findViewById(R.id.TextView_Show);
            mySpinner = (Spinner) findViewById(R.id.spinner_City);
            // 第二步:为下拉列表定义一个适配器,这里就用到里前面定义的list。
            adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_spinner_item, list);
            // 第三步:为适配器设置下拉列表下拉时的菜单样式。
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            // 第四步:将适配器添加到下拉列表上
            mySpinner.setAdapter(adapter);
            // 第五步:为下拉列表设置各种事件的响应,这个事响应菜单被选中
            mySpinner
                    .setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
                        public void onItemSelected(AdapterView<?> arg0, View arg1,
                                int arg2, long arg3) {
                            // TODO Auto-generated method stub
                            /* 将所选mySpinner 的值带入myTextView 中 */
                            myTextView.setText("您选择的是:" + adapter.getItem(arg2));
                            /* 将mySpinner 显示 */
                            arg0.setVisibility(View.VISIBLE);
                        }
    
                        public void onNothingSelected(AdapterView<?> arg0) {
                            // TODO Auto-generated method stub
                            myTextView.setText("NONE");
                            arg0.setVisibility(View.VISIBLE);
                        }
                    });
            /* 下拉菜单弹出的内容选项触屏事件处理 */
            mySpinner.setOnTouchListener(new Spinner.OnTouchListener() {
                public boolean onTouch(View v, MotionEvent event) {
                    // TODO Auto-generated method stub
                    /* 将mySpinner 隐藏,不隐藏也可以,看自己爱好 */
                    v.setVisibility(View.INVISIBLE);
                    return false;
                }
            });
            /* 下拉菜单弹出的内容选项焦点改变事件处理 */
            mySpinner.setOnFocusChangeListener(new Spinner.OnFocusChangeListener() {
                public void onFocusChange(View v, boolean hasFocus) {
                    // TODO Auto-generated method stub
                    v.setVisibility(View.VISIBLE);
                }
            });
        }
    }

    布局代码:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/widget"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/TextView_Show"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="你选择的是"
            android:textSize="25sp" >
        </TextView>
    
        <Spinner
            android:id="@+id/spinner_City"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
        </Spinner>
    
    </LinearLayout>

    参考文献:http://www.cnblogs.com/plokmju/p/android_Spinner.html

  • 相关阅读:
    lau-表和for while循环
    lua学习笔记——lua数据类型
    javascript 高级程序设计1--14章重点总结
    消息推送之androidpn部署
    extjs底层源码实现继承分析
    cache数据库学习周结
    sql Cursor的用法
    java 报表到excel
    html5之datalist标签
    学习笔记之html5相关内容
  • 原文地址:https://www.cnblogs.com/lea-fu/p/3297595.html
Copyright © 2011-2022 走看看