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的案例了,效果如下:
每次选择学历,监听器都会监听改变的结果