1什么是Spinner控件Spinner控件即为下拉式选择器如下图
2怎么用
<Spinner
android:id="@+id/citys"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/citys"/>
上面就定义好了一个Spinner控件最后一句的含义是获取资源文件中名为citys的值相关定义如下:<string-array name="citys">
<item >北京</item>
<item >上海</item>
<item >广州</item>
<item >深圳</item>
<item >成都</item>
</string-array>
现在测试就可以实现一个最基本的Spinner控件了如下图:
但是我们一般不这样在资源文件中定义相关的值而是用代码的方式去实现 1)需要为Spinner控件注册一个id 2)通过id去设施Spinner的样式
3)设置Spinner下拉的样式
xml文件中的代码:
<Spinner
android:id="@+id/newCitys01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
java代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取Spinner
spinnerCity=(Spinner)findViewById(R.id.newCitys01);
//获取资源
city=getResources().getStringArray(R.array.citys);
//创建adapter别设置相关样式
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, city);
//设置下拉的样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//为Spinner添加adapter,二者产生关联
spinnerCity.setAdapter(adapter);
}
效果也与上面的一样
3 添加监听器 可以采用匿名内部类的方法,亦可以实现android.widget.AdapterView.OnItemSelectedListener这个接口
我来做如下实现当选择了某个城市之后就用Tost显示该城市(采用接口实现实现)
一共有两个方法
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
TextView text1=(TextView)arg1;
Toast.makeText(this, text1.getText().toString(), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
4创建自己的Spinner
(1)仿照sdk文件下的xml文件进行改写 D:\Android\adt-bundle-windows-x86-20131030\sdk\platforms\android-19\data\res\layout然后打开simple_spinner_dropdown_item
进行改写(这里我只是改变了字体的颜色)
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="#00ff00">
</CheckedTextView>
效果如下:
(2)自定义下拉样式(插入图片)
我们下拉的是一个对象包括姓名,地址然后在左边插入一张图片
1)person类应该严格按照JavaBeen的设计
package com.vice.doman;
public class Person {
private String name;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Person(String name, String address) {
super();
this.name = name;
this.address = address;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
}
2)构建自定义的Spinner布局 分三部分最左边为一张图片,中间为人的姓名右边为人的地址(res/layout下新建布局)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/name_TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/address_TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
3)添加Spinner控件
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
4)重要部分创建自己的适配器适配下拉样式与Spinner
package com.vice.adapter;
import java.util.List;
import com.example.android_spinner06.R;
import com.vice.doman.Person;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter{
private List<Person> mList;//存放数据
private Context mContext;
public MyAdapter(Context mContext,List<Person>mList){
this.mContext=mContext;
this.mList=mList;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//获得inflater
LayoutInflater inflater=LayoutInflater.from(mContext);
//加载布局
convertView=inflater.inflate(R.layout.spinner_custom,null);
if(convertView!=null){
//设置图片
ImageView image=(ImageView)convertView.findViewById(R.id.image);
image.setImageResource(R.drawable.ic_launcher);
//设置文本
TextView name=(TextView)convertView.findViewById(R.id.name_TextView);
//设置文本
TextView address=(TextView)convertView.findViewById(R.id.address_TextView);
name.setText(mList.get(position).getName());
address.setText(mList.get(position).getAddress());
}
return convertView;
}
}
5)Activity中适配Spinner与下拉式样式
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
personSpinner=(Spinner)findViewById(R.id.spinner);
List<Person>persons=new ArrayList<Person>();
persons.add(new Person("张三","北京"));
persons.add(new Person("李四","上海"));
persons.add(new Person("王五","广州"));
persons.add(new Person("赵六","深圳"));
persons.add(new Person("鹏少","成都"));
MyAdapter adapter=new MyAdapter(this,persons);
personSpinner.setAdapter(adapter);
}
6)测试最后的样式为
关于未来关于我敬请期待