Spinner控件是一个下拉选择型控件,效果如图:
下拉后效果如图:
下面直接来个例子:
1、在布局文件中添加一个Spinner控件
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_centerHorizontal="true"
android:dropDownSelector="@color/colorPrimaryDark"
></Spinner>
2、准备要在该控件显示的数组,每一行会显示数组中的一项。这里将数组定义在strings.xml文件中。
当然这里把数据写死了,我们可以定义一个list,将要显示的数据变为可控的。
<string-array name="spinner_data">
<item>春</item>
<item>夏</item>
<item>秋</item>
<item>冬</item>
</string-array>
3、在Activity中找到该控件,初始化后设置Adapter和监听
/**
* 实现了AdapterView.OnItemSelectedListener接口,处理 选择下拉列表中项目 这一动作
*/
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener{
private Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = (Spinner) findViewById(R.id.spinner);
//生成适配器
//参数详解
//第一个 this 上下文对象
//第二个 R.array.spinner_data 数组,这里用的是在strings.xml文件中定义好的数组
//第三个 android.R.layout.simple_spinner_item 每一项的显示布局文件,这里使用安卓提供的,我们也可以自己生成该文件
ArrayAdapter arrayAdapter = ArrayAdapter.createFromResource(this,R.array.spinner_data,android.R.layout.simple_spinner_item);
//设置每一个选项的视图
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//设置是配置
spinner.setAdapter(arrayAdapter);
//设置监听器
spinner.setOnItemSelectedListener(this);
}
//实现onItemSelected方法,当我们选择一个选项时,会调用这个方法
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//弹出提示框
Toast.makeText(this,parent.getItemAtPosition(position).toString() , Toast.LENGTH_LONG).show();
}
//测试时没有看到该方法的提示框(-_-)
@Override
public void onNothingSelected(AdapterView<?> parent) {
Toast.makeText(this, "你没有选择任何选项", Toast.LENGTH_LONG).show();
}
}
好了,先去看看效果吧!
4、接下来演示使用自己定义的布局来显示每一项的数据
a)定义一个布局文件spinner_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--添加一个TextView,并设置ID属性-->
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_marginTop="10dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="10dp"
android:textAlignment="center"/>
</LinearLayout>
b)修改Activity中代码
删除以下代码:
ArrayAdapter arrayAdapter = ArrayAdapter.createFromResource(this,R.array.spinner_data,android.R.layout.simple_spinner_item);
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
添加以下代码
//设置要显示的数据
List<String> data = new ArrayList<>();
data.add("北京");
data.add("上海");
data.add("广州");
data.add("深圳");
//参数详解
//第一个 this 上下文对象
//第二个 R.layout.spinner_item 显示每一项的布局文件
//第三个 R.id.text 布局文件中用来显示每一项内容的控件id
//第四个 data 需要显示的数据
ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.spinner_item, R.id.text, data);
好了,可以查看效果了。其实就是使用动态数据来生成一个新的Adapter。
完成之后,我们发现其实Spinner和ListView的用法相当。
该篇结束,若有不足,望不吝赐教!