安卓的下拉控件Spinner

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

1.Spinner的常用XML属性

  • android:spinnerMode:dialog和dropDown两种模式,默认为下拉列表。
  • android:entries:使用<string-array…/>资源配置数据源。
  • 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="spinnerTitle">操作</string> //string标签设置字符串,name是变量名,操作是变量的值
    
    //string-array标签设置数组,name是数组名,item是数组中的值
    <string-array name="operate">	
            <item>求和</item>
            <item>总数</item>
            <item>平均数</item>
     </string-array>
    

    xml文件结构:
    strings.xml文件结构

    • 在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

选择“平均数”这个选项会在下面的textview显示选择的内容
在这里插入图片描述

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<String> adapter = new ArrayAdapter<String>(
                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<String> getData() {
                 // 数据源
                 List<String> dataList = new ArrayList<String>();
                 dataList.add("北京");
                 dataList.add("上海");
                 dataList.add("南京");
                 dataList.add("宜昌");
                 return dataList;
             }

activity_main.xml

<Spinner
            android:id="@+id/spinnerDown"
            android:prompt="@string/spinnerTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:spinnerMode="dropdown" />

        <Spinner
            android:id="@+id/spinnerDialog"
            android:layout_marginTop="100dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:entries="@array/operate"
            android:prompt="@string/spinnerTitle"
            android:spinnerMode="dialog" />

        <TextView
            android:id="@+id/textShow"
            android:layout_marginTop="100dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

strings.xml

<resources>
    <string name="app_name">mySpinner</string>
    <string name="spinnerTitle">操作</string>
    <string-array name="operate">
        <item>求和</item>
        <item>总数</item>
        <item>平均数</item>
    </string-array>
</resources>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值