spinner 其实就是一个列表选择框,不过android的列表选择框并不是需要显示下拉列表的,
相当于弹出一个菜单供用户选择。
spinner 是ViewGrop的一个间接子类,因此他可以充当容器。
先介绍一下apinner 的两个常用属性.
android:prompt 设置该列表选择框的提示信息
android:entries 使用数组资源设置该下拉列表框的列表项目。
第一步,定义需要显示的数据。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">spanner</string>
<string name="book">选择书籍</string>
<string-array name="books">
<item >java 学习笔记</item>
<item >J2EE 学习笔记</item>
<item >android 学习笔记</item>
</string-array>
</resources>
第二步.定义一个Spinner 把数据展示出来。
<?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"
>
<Spinner
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/books"
android:prompt="@string/book"
/>
</LinearLayout>
效果图:
以上的效果,没有写任何代码,但通常做开发中并不是这么做的。而是用代码来实现的效果。
package android.basic.lesson10;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
public class MainHelloSpinner extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//找到Xml中定义的下拉列表
Spinner spinner = (Spinner)findViewById(R.id.spinner);
//准备一个数组适配器
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.colors, android.R.layout.simple_spinner_item);
//设置下拉样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//为下拉列表设置适配器
spinner.setAdapter(adapter);
//定义子元素选择监听器
OnItemSelectedListener oisl= new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
Toast.makeText(MainHelloSpinner.this,"选择的色彩: " +
parent.getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
};
//为下拉列表绑定事件监听器
spinner.setOnItemSelectedListener(oisl);
}
}
效果图:
Spinner在项目中的应用。场景,spinner中的数据是从数据库中提取出来的,也就是一个list。这个时候我们就需要重写BaseAdapter了。代码如下:
//下拉表监听方法
public void SpinnerListener(final List<String> list)
{
Spinner setspinner=(Spinner)this.findViewById(R.id.mySpinner);
BaseAdapter ba=new BaseAdapter()
{
List<String> result=list;
@Override
public int getCount()
{
return result.size();
}
@Override
public Object getItem(int arg0)
{
return null;
}
@Override
public long getItemId(int arg0)
{
return 0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2)
{
LinearLayout ll=new LinearLayout(MainActivity.this);
ll.setOrientation(LinearLayout.VERTICAL); //设置朝向
TextView tv=new TextView(MainActivity.this);
tv.setText(result.get(arg0));
tv.setTextSize(18);//设置字体大小
tv.setTextColor(R.color.black);//设置字体颜色
ll.addView(tv);//添加到LinearLayout中
return ll;
}
};
setspinner.setAdapter(ba);//为Spinner设置内容适配器
setspinner.setOnItemSelectedListener //设置选项选中的监听器
(
new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3)
{
LinearLayout ll=(LinearLayout)arg1;//获取当前选中选项对应的LinearLayout
TextView tvn=(TextView)ll.getChildAt(0);//获取其中的TextView
String Isource=(String) tvn.getText();
System.out.println("Isource:"+Isource);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) { }
}
);
}
使用的时候:
List<String> rolors = new ArrayList<String>();
rolors.add("红色");
rolors.add("白色");
SpinnerListener(rolors);
效果图: