Android控件之Spinner
1 Spinner简介
Spinner是下拉列表。
http://developer.android.com/reference/android/widget/Spinner.html
http://developer.android.com/guide/topics/ui/controls/spinner.html
2 Spinner示例
创建一个activity,包含2个Spinner。
第一个spinner,显示星球选项。
第二个spinner,显示颜色选项。
应用层代码
package com.skywang.control;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Toast;
import android.widget.TextView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.util.Log;
public class SpinnerTest extends Activity {
private static final String TAG = "SKYWANG";
private Spinner mSpinPlanet;
private Spinner mSpinColor;
private TextView mViewColor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.spinner_test);
// 设置Spinner
mSpinPlanet = (Spinner) findViewById(R.id.spin_planet);
// 设置ArrayAdapter对应的数据和布局
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.array_planets, android.R.layout.simple_spinner_item);
// 设置ArrayAdapter的下拉布局
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 将该ArrayAdapter赋值给Spinner
mSpinPlanet.setAdapter(adapter);
// 设置选择监听函数
mSpinPlanet.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
// Spinner选择的回调函数
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
Log.d(TAG, "select SpinPlanet pos:"+pos+" id:"+id);
// 获取array_planets获取对应的String数组
String[] planets = getResources().getStringArray(R.array.array_planets);
// 获取pos对应的字符串
String planet = planets[pos];
// 提示
showToast(planet);
}
// Spinner未选择的回调函数
public void onNothingSelected(AdapterView<?> parent) {
Log.d(TAG, "SpinPlanet onNothingSelected");
}
});
mViewColor = (TextView) findViewById(R.id.tv_color);
// 设置Spinner
mSpinColor = (Spinner) findViewById(R.id.spin_color);
// 设置ArrayAdapter对应的数据和布局
ArrayAdapter<CharSequence> colorAdapter = ArrayAdapter.createFromResource(this,
R.array.array_colors, android.R.layout.simple_spinner_item);
// 设置ArrayAdapter的下拉布局
colorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 将该ArrayAdapter赋值给Spinner
mSpinColor.setAdapter(colorAdapter);
// 设置选择监听函数
mSpinColor.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
// Spinner选择的回调函数
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
Log.d(TAG, "select SpinColor pos:"+pos+" id:"+id);
String[] colors = getResources().getStringArray(R.array.array_colors);
// 获取pos对应的字符串
String color = colors[pos];
// 提示
showToast(color);
}
// Spinner未选择的回调函数
public void onNothingSelected(AdapterView<?> parent) {
Log.d(TAG, "SpinColor onNothingSelected");
}
});
}
private void showToast(CharSequence msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
代码说明:
设置下拉列表时,要设置数据。若是字符串数据,可以通过ArrayAdapter去设置;若是数据的数据,可以通过CursorAdapter去设置。
设置完数据之后,要设置下拉时的显示视图。本例中,使用的是标准模块simple_spinner_dropdown_item。
array_plants和array_colors定义在arrays.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="array_planets">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
</string-array>
<string-array name="array_colors">
<item>White</item>
<item>Red</item>
<item>Orange</item>
<item>Yellow</item>
<item>Green</item>
<item>Cyan</item>
<item>Blue</item>
<item>purple</item>
<item>Black</item>
</string-array>
</resources>
layout文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:text="@string/text_planet" />
<Spinner
android:id="@+id/spin_planet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:prompt="@string/text_planet"
/>
<TextView
android:id="@+id/tv_color"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:text="@string/text_color" />
<Spinner
android:id="@+id/spin_color"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:prompt="@string/text_color"
/>
</LinearLayout>
manifest文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.skywang.control"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.skywang.control.SpinnerTest"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
点击下载:源代码
运行效果图: