skywang12345

导航

统计
  • 随笔 - 278
  • 文章 - 0
  • 评论 - 1380
  • 引用 - 0
 

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>

 

点击下载:源代码

 

运行效果图

posted on 2013-06-15 15:48 如果天空不死 阅读(...) 评论(...) 编辑 收藏