Android中的Spinner控件)

本文介绍了Android中的Spinner控件,详细阐述了如何使用Spinner,包括在资源文件中定义、用代码实现样式设置、添加监听器以显示选择的项目,以及如何自定义Spinner的样式,如改变字体颜色和插入图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



关于未来关于我敬请期待







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值