Spinner组件与Swing编程的Spinner不同,此处Spinner其实就是一个列表选择框。不过android的列表框并不是显示下拉列表的,而是相当于弹出一个菜单供用户选择
Spinner是ViewGroup的间接子类,因此它也可作为容器使用,spinner支持以下的XML属性
1.android:prompt :设置该列表选择框的提示
2.android:entries : 使用数组资源设置该下拉列表框的列表项目
如果开发者使用spinner时已经可以确定下拉列表框的列表项,则完全不需要编写代码,只要为Spinner指定android:entries属性即可实现一个下拉列表框,如以下界面布局文件所示。
<span style="font-size:18px;"><?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="vertical" >
<Spinner
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/books"/>
</LinearLayout>
</span>
上面的界面布局文件中使用@array/books指定数组资源,因此我们需要在res/value目录下使用XML文件来定义一份数组资源该数组资源文件的内容如下:
<span style="font-size:18px;"></span><pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array
name="books">
<item >疯狂java讲义</item>
<item >疯狂XML讲义</item>
<item >疯狂Android讲义</item>
</string-array>
</resources>
使用Activity显示上面的布局,将看到以下的界面
当然上面的界面布局文件也可以不使用@array/books指定数组资源,我们可以建立adapter来做。
步骤如下:
1.建立数据源(这里就不适用上面的@array/books来指定数组资源了)
2.建立adapter,并连接数据源
3.绑定的UI组件
布局文件代码如下:
<?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="vertical" >
<Spinner //新建一个Spinner组件,没有指定<span style="font-size: 18px;">android:entries 属性</span>
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
java文件
package com.example.spinner;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.os.Build;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
showSpinner();
}
private void showSpinner() {
Spinner spinner = (Spinner)findViewById(R.id.spinner);
//1.建立数据源
String[] string = new String[] {"谢先生","王先生","李先生"};
//2.建立adapter,并连接数据源
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, string);
//3.绑定的UI组件
spinner.setAdapter(adapter);
}
}
好了,看下面的效果图吧(就是这么简单)
当然,一行中不可能只有一个数据,比如一行中包括了姓名和和居住地(比如还价格图片什么的),如下图
这时我们就不能用系统的Adapter了,比如上面用的就是系统的ArrayAdapter来实现功能的,现在我们自己定义一个adapter,这样的好处是用起来更灵活了
1.首先用一个类User来定义我们的数据(姓名(name)和居住地(address))
User.java
package com.example.spinner;
public class User {
private String name;
private String address;
public User(String username,String useraddress) {
name = username;
address = useraddress;
}
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;
}
}
2.用一个user_item来存放我们的User数据
usr=er_item.xml
<?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" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:layout_marginLeft="10dip"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:textSize="20sp"
android:text="TextView" />
</LinearLayout>
3.定义我们自己的基础适配器(adapter)
UserAdapter.java
package com.example.spinner;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
public class UserAdater extends BaseAdapter {
List<User> muser;
Context mcontext;
public UserAdater(List<User> username,Context context) {
muser = username;
mcontext = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return muser.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return muser.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
arg1 = LayoutInflater.from(mcontext).inflate(R.layout.userlayout,null);
TextView textview1 = (TextView)arg1.findViewById(R.id.textView1);
TextView textview2 = (TextView)arg1.findViewById(R.id.textView2);
textview1.setText(muser.get(arg0).getName());
textview2.setText(muser.get(arg0).getAddress());
return arg1;
}
}
在主类中实现它,还是以下几个步骤:
1.建立数据源(这里就不适用上面的@array/books来指定数组资源了)
2.建立adapter,并连接数据源
3.绑定的UI组件
上面已经讲过了
MainActivity.java
package com.example.spinner;
import java.util.ArrayList;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.os.Build;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
// showSpinner();
showSpinner2();
}
// private void showSpinner() {
// Spinner spinner = (Spinner)findViewById(R.id.spinner);
// //1.建立数据源
// String[] string = new String[] {"谢先生","王先生","李先生"};
// //2.建立adapter,并连接数据源
// ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, string);
// //3.绑定的UI组件
// spinner.setAdapter(adapter);
// }
private void showSpinner2() {
Spinner spinner = (Spinner)findViewById(R.id.spinner);
//1.建立数据源
ArrayList<User> user = new ArrayList<User>();
//添加数据
user.add(new User("谢小青", "广东徐闻"));
user.add(new User("谢小黄", "广东徐闻"));
user.add(new User("谢小绿", "广东徐闻"));
user.add(new User("谢小红", "广东徐闻"));
user.add(new User("谢小黑", "广东徐闻"));
//2.建立adapter,并连接数据源
UserAdater useradater = new UserAdater(user, this);
//3.添加到UI
spinner.setAdapter(useradater);
}
}
虽然界面看起来不美观,但是基本功能都实现了,大家参考参考。