安卓的下拉控件Spinner

spinner的详情及扩展 https://www.cnblogs.com/plokmju/p/android_Spinner.html

1.Spinner的常用XML属性

  • android:spinnerMode:dialog和dropDown两种模式,默认为下拉列表。
  • android:entries:使用资源配置数据源。
  • android:prompt:设置标题,仅在dialog模式下有效。

2.Spinner的触发事件

它本身没有定义这些事件,均继承自间接父类AdapterView。

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

AdapterView parent:适配器的一个指针,适配器中有多个item,parent表示当前选中的那个item。
View view:通过view获取item中的控件。
int position:在适配器中的位置。
long id :id和position的值通常是一样的。id=adapter.getItemId(position)

3.Spinner数据源的设置

  • 通过xml资源文件设置,缺点是设置的数据是固定的,不是动态的。

  • 使用Adapter接口设置,这是最常见的方式,动态、灵活,可以设定各种样式以及数据来源。

    xml资源文件设置

    新建资源文件:右击app/res/values-->new-->XML-->values XML file-->strings.xml
    
    操作 //string标签设置字符串,name是变量名,操作是变量的值
    
    //string-array标签设置数组,name是数组名,item是数组中的值
    	
            求和
            总数
            平均数
     
    

    xml文件结构:
    安卓的下拉控件Spinner_第1张图片

    • 在strings.xml中设置好数据后,spinner控件使用android:entries="@array/operate"获取数组的数据, android:prompt="@string/spinnerTitle"获取字符串的值

设置适配器Adapter

1.设置一个ArrayList存放显示的数据。
2.创建一个ArrayAdapter。
ArrayAdapter adapter = new ArrayAdapter(Context context, android.R.layout.simple_spinner_item,ArrayList datalist);
第一个参数:上下文环境,当前的activity。
第二个参数:这个是安卓内置的布局,它是一个textview,datalist的数据通过textview.setText()显示。也可以自己定义布局用来显示datalist的数据。
第三个参数:存放数据的集合。

spinner的原理就是,遍历datalist里面的每一条数据,读出一条,显示到第二个参数对应的布局中,就形成了spinner下拉出现多个数据

3.关联适配器和spinner控件。
获取spinner控件:spinnerDown = (Spinner) findViewById(R.id.spinnerDown);
spinnerDown.setAdapter(adapter);

4.效果图

下滑的spinner
安卓的下拉控件Spinner_第2张图片
弹出对话框的spinner
安卓的下拉控件Spinner_第3张图片
选择“平均数”这个选项会在下面的textview显示选择的内容
安卓的下拉控件Spinner_第4张图片

5.代码

MainActivity.java

   private Spinner spinnerDown,spinnerDialog;
    private TextView textShow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        spinnerDown = (Spinner) findViewById(R.id.spinnerDown);
        spinnerDialog = (Spinner) findViewById(R.id.spinnerDialog);
        textShow=(TextView)findViewById(R.id.textShow);


        // 声明一个ArrayAdapter用于存放简单数据
        ArrayAdapter adapter = new ArrayAdapter(
                MainActivity.this, android.R.layout.simple_spinner_item,
                getData());
        // 把定义好的Adapter设定到spinner中
        spinnerDown.setAdapter(adapter);
        // 为第一个Spinner设定选中事件
        spinnerDialog.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView parent, View view,
                                       int position, long id) {
                // 在选中之后触发
                String opt=parent.getItemAtPosition(position).toString();
                textShow.setText(opt);
            }
            @Override
            public void onNothingSelected(AdapterView parent) {
                textShow.setText("");
            }
        });

        spinnerDown.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView parent, View view,
                                       int position, long id) {
                // 在选中之后触发
                textShow.setText(parent.getItemAtPosition(position).toString());
            }
            @Override
            public void onNothingSelected(AdapterView adapterView) {
                textShow.setText("");
            }
        });
    }
     private List getData() {
                 // 数据源
                 List dataList = new ArrayList();
                 dataList.add("北京");
                 dataList.add("上海");
                 dataList.add("南京");
                 dataList.add("宜昌");
                 return dataList;
             }

activity_main.xml



        

        

strings.xml


    mySpinner
    操作
    
        求和
        总数
        平均数
    


你可能感兴趣的:(android)