Android中的Spinner控件)

来源:互联网 发布:万学海文考研 知乎 编辑:程序博客网 时间:2024/06/05 16:12

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);//获取SpinnerspinnerCity=(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显示该城市(采用接口实现实现)

一共有两个方法

@Overridepublic void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {  TextView text1=(TextView)arg1;  Toast.makeText(this, text1.getText().toString(), Toast.LENGTH_SHORT).show();}@Overridepublic 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;    }@Overridepublic int getCount() {return mList.size();}@Overridepublic Object getItem(int position) {return mList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//获得inflaterLayoutInflater 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与下拉式样式

@Overrideprotected 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)测试最后的样式为



关于未来关于我敬请期待







0 0
原创粉丝点击