概述
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) {
}
});
}
}