Hello,Views(六)下拉框Spinner(附源码)
前言
本文根据官方教程适当翻译而来。(源码下载)
1.新建工程HelloSpinner
2.在main.xml里面添加一个spinner,设置Android:promt属性,这是一个提示属性,同时为默认的textview修改Android:text属性,它们将引用同一个string文本,如何理解呢,看了下面的图应该有所意会了。实现的效果是下图中红圈内的文字提示:
局部的main.xml如下:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/planet_prompt" />
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="@string/planet_prompt"/>
3.在onCreate()里面添加操作spinner的代码:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner spinner = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.planets_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
}
4.
解释一下上面的两句ArrayAdapter.createFromResource(this,R.array.planets_array, android.R.layout.simple_spinner_item);和adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);关于前者它的函数原型如下
public static ArrayAdapter<CharSequence> createFromResource(Context context, int textArrayResId, int textViewResId)
参数:
context 应用的上下文
textArrayResId 数据源数组标识
textViewResId 用于显示的布局view
返回值:ArrayAdapter<CharSequence>
结合本例, R.array.planets_array 标识了我们要用到的字符串数组.R.layout.simple_spinner_item 标识了系统定义的一个标准的Spinner的布局外观。
而后者adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);定义的是spinner的每一个item的布局外观。
5.为了响应用户选择下拉框中某一项的事件,还要添加一个OnItemSelectedListener监听,具体实现是,新建一个MyOnItemSelectedListener 类继承OnItemSelectedListener类,在其中重写两个方法onItemSelected(),onNothingSelected(),它们分别处理item被选中和没选的事件:
public class MyOnItemSelectedListener implements OnItemSelectedListener
{
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
{
Toast.makeText(parent.getContext(),
"The planet is " + parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG)
.show();
}
public void onNothingSelected(AdapterView parent)
{
// Do nothing.
}
}
5.OK,运行。(源码下载)