您的位置:首页 > 移动开发 > Android开发

android学习---Spinner控件

2014-08-03 10:49 218 查看
Spinner 有点像下拉菜单,其实是一个弹出窗口,但是是可以进行进一步操作的弹出窗口,下面我们来学习一下Spinner



可见Spinner是继承ViewGroup的,因此也可作为容器所用。 Spinner支持如下xml属性





详细请参考Android API文档

下面就来实战一下,如何使用Spinner

如果使用的Spinner时已经可以确定弹出窗口列表的内容,则不需要编写代码,直接给Spinner指定android:entries属性即可

(1)编写布局文件 activity_main.xml

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <Spinner
        android:id="@+id/spinner"
         android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:entries="@array/language"/>
</LinearLayout>


(2) 编写下拉内容 strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Spinner</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string-array name="language">
		<item>英语</item>        
		<item>中文</item>        
		<item>日语</item>        
		<item>韩语</item>        
		<item>西班牙语</item>        
		<item>法语</item>        
		<item>俄语</item>        
    </string-array>

</resources>


完成上面两步,一个简单的Spinner效果就出来了,如图:



如果Spinner的弹出窗口内容不是确定的,需要动态添加,那又如何实现呢? 下面我们完成一个复杂一点的Spinner案例。

说明:案例涉及Spinner的知识点有:(1)动态添加弹出窗口内容 和确定弹出窗口内容两种方式 (2)自定义弹出窗口 (3)实现Spinner监听

(1)编写布局文件 activity_main.xml

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:id="@+id/info_city"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/city_prompt" />
    <Spinner
        android:id="@+id/mycity"
        android:prompt="@string/city_prompt"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:entries="@array/city"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="30dp"
        />
  
    <TextView
        android:id="@+id/info_edu"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/education_prompt" />
    <Spinner
        android:id="@+id/myedu"
        android:layout_width="250dp"
        android:layout_height="wrap_content" 
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="30dp"/>

</LinearLayout>


(2)编写strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Spinner</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="city_prompt">请选择您喜欢的城市:</string>
    <string name="education_prompt">请选择学历:</string>
</resources>


(3) 编写城市array,下拉内容 city_data.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string-array name="city">
	    <item>北京</item>
	    <item>上海</item>
	    <item>广州</item>
	    <item>深圳</item>
	    <item>天津</item>
	    <item>杭州</item>
	</string-array>
</resources>


(4) 编写 MainActivity.java



步骤:(1)找到布局的Spinner

(2)动态添加spinner的内容list 集合

(3)定义并设置适配器ArrayAdapter

(4)给Spinner设置关联适配器

(5)给Spinner设置监听器

package com.example.spinner;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class MainActivity extends Activity {
	
	private Spinner spinnerEdu = null; //定义学历的spinner
	private Spinner spinerCity = null; //定义城市spinner

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		this.spinnerEdu = (Spinner) findViewById(R.id.myedu);  //获取学历spinner组件
		this.spinerCity = (Spinner) findViewById(R.id.mycity); //获取城市spinner组件
		
		//参数一:上下文           参数二:内容数组      参数三:spinner样式 
		ArrayAdapter<CharSequence> cityAdapter  = ArrayAdapter.createFromResource(this, R.array.city, android.R.layout.simple_list_item_multiple_choice);
		this.spinerCity.setAdapter(cityAdapter); //spinner设置适配器
		this.spinerCity.setSelection(3);  //默认选中
				
		List<CharSequence> list = new ArrayList<CharSequence>(); //list集合,
		list.add("小学");
		list.add("初中");
		list.add("高中");
		list.add("大专");
		list.add("本科");
		list.add("研究生");
		list.add("博士");
		//参数一:上下文           参数二:spinner样式      参数三:内容list
		ArrayAdapter<CharSequence> eduAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_list_item_single_choice, list);
		this.spinnerEdu.setAdapter(eduAdapter);  //spinner设置适配器
		
		//为spinnerEdu添加监听器
		this.spinnerEdu.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			//选中项
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				String currChose = parent.getItemAtPosition(position).toString();
				Log.i("你的学历是:", currChose);
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {
				Log.i("onNothingSelected", "onNothingSelected");
				
			}
		});
		
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


经过上面的步骤,到这来已经完成了一个Spinner的案例了,效果如下:



每次选择学历,监听器都会监听改变的结果



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: