Android UI控件之Spinner

概述

Spinner就是一个弹出的下拉选择菜单或者也可以被称为列表选择框

继承关系如下:
这里写图片描述

如果在使用Spinner时已经可以确定列表选择框里的列表项,则完全不需要编写代码,只要为Spinner指定android:entries属性即可让Spinner正常工作;如果程序需要在程序运行时动态决定Spinner的列表项,或者程序需要对Spinner的列表项进行定制,则可使用Adapter提供列表项。

android:entries属性并不是Spinner定义的,而不是AbsSpinner中定义的,因此Gallery(继承了AbsSpinner)也支持该XML属性。

Spinner 监听器

一般使用setOnItemSelectedListener来监听item选中事件
setOnItemClickListener和setOnClickListener都不能用来监听Spinner,否则会出错。
setOnLongClickListener能用来监听Spinner的长按事件,只能监听Spinner被长按住,好像基本用不上。
setOnTouchListener能用来监听Spinner控件的触摸事件,注意一次快速的触摸都能触发这事件好几次。

 /**Item选择监听*/
           spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
               @Override
               public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                   Toast.makeText(SpinnerDemoActivity.this, "点击了" +position, Toast.LENGTH_SHORT).show();
               }

               @Override
               public void onNothingSelected(AdapterView<?> parent) {

               }
           });

如下界面
布局文件中定义了两个Spinner组件,其中一个Spinner组件指定了android:entries属性,因此需要在Activity中为他设置Adapter。

示例Demo:

这里写图片描述

layout/activity_spinner_demo.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.makesky.studydemo01.view.SpinnerDemoActivity">

    <!--在xml中定义该Spinner组件的数组-->
    <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:entries="@array/StringData"
        android:popupBackground="#00FA9A"
        android:dropDownWidth="200dp"
        android:tooltipText="123">
    </Spinner>

    <!--在代码中加载数组,并监听其Item选中事件-->
    <Spinner
        android:id="@+id/sp_spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:popupBackground="#00FA9A"
        android:dropDownWidth="200dp"
        android:tooltipText="123">
    </Spinner>
</LinearLayout>

values/strings.xml

    <string-array name="StringData">
        <item>苹果</item>
        <item>香蕉</item>
        <item>西瓜</item>
        <item>橙子</item>
        <item>葡萄</item>
    </string-array>

SpinnerDemoActivity.java

public class SpinnerDemoActivity extends AppCompatActivity {

    @BindView(R.id.sp_spinner)
    Spinner spSpinner;
    String[] mStringData={"北京","上海","广州","深圳","杭州"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spinner_demo);
        ButterKnife.bind(this);

        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,mStringData);
        spSpinner.setAdapter(adapter);

        spSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(SpinnerDemoActivity.this, "点击了" + mStringData[position], Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }
}

猜你喜欢

转载自blog.csdn.net/MakerCloud/article/details/81409242