1} 创建一个Spinner的步骤
Spinner就是下拉菜单。
1) 在布局文件当中声明
<Spinner
android:id="@+id/spinnerId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
2) 在string.xml当中声明一个数组
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
</string-array>
3) 创建一个ArrayAdapter
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.planets_array,android.R.layout.simple_spinner_item);
//设置Spinner当中每个条目的样式,同样是引用一个Android系统提供的布局文件
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
android.R.layout.simple_spinner_item 是系统自带的标准布局样式,用来定义下拉菜单是什么样子.
android.R.layout.simple_spinner_dropdown_item 用来定义每个选项是什么样子.
4) 得到Spinner对象,并设置数据
spinner = (Spinner) findViewById(R.id.spinnerId);
spinner.setAdapter(adapter);
spinner.setPrompt("测试");
spinner.setPrompt 设置标题
5) MainActivity.java
<pre name="code" class="java">public class MainActivity extends Activity {
private Spinner spinner = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
spinner = (Spinner) findViewById(R.id.spinnerId);
List<String> list = new ArrayList<String>();
list.add("test1");
list.add("test2");
//调用ArrayAdapter的构造函数来创建ArrayAdapter对象
//第一个参数是指上下文对象
//第二个参数指定了下拉菜单当中每一个条目的样式
//第三个参数指定了TextView控件的ID
//第四个参数为整个列表提供数据
ArrayAdapter adapter = new ArrayAdapter(this,R.layout.item,R.id.textViewId,list);
//通过createFromResource方法创建一个ArrayAdapter对象
//第一个参数是指上下文对象
//第二参数引用了在strings.xml文件当中定义的String数组
//第三个参数是用来指定Spinner的样式,是一个布局文件ID,该布局文件由Android系统提供,也可替换为自己定义的布局文件
/*ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.planets_array,
android.R.layout.simple_spinner_item);
*/ //设置Spinner当中每个条目的样式,同样是引用一个Android系统提供的布局文件
//adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setPrompt("测试");
//为spinner对象绑定监听器
spinner.setOnItemSelectedListener(new SpinnerOnSelectedListener());
spinner2 = (Spinner) this.findViewById(R.id.spinner2);
// List<Map<String,Object>>
List<Map<String, Object>> listmaps = MyAdapter.getListMaps();
SimpleAdapter simpleAdapter = new SimpleAdapter(Main.this, listmaps,
R.layout.item, new String[] { "ivLogo", "applicationName" },new int[] { R.id.imageview, R.id.textview });
spinner2.setAdapter(simpleAdapter);
spinner2.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
String appName = ((Map<String, Object>) spinner2.getItemAtPosition(position)).get("applicationName").toString();
setTitle(appName);
}
});
}
//这个监听器主要用来监听用户选择列表的动作
class SpinnerOnSelectedListener implements OnItemSelectedListener{
//当用户选定了一个条目时,就会调用该方法
public void onItemSelected(AdapterView<?> adapterView, View view, int position,long id) {
String selected = adapterView.getItemAtPosition(position).toString();
System.out.println(selected);
}
public void onNothingSelected(AdapterView<?> adapterView) {
}
}
}
List<Map<String, Object>> getListMaps() 方法,实现下拉列表中有图片和文字。
public static List<Map<String, Object>> getListMaps() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("ivLogo", R.drawable.calendar);
map1.put("applicationName", "日历");
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("ivLogo", R.drawable.eoemarket);
map2.put("applicationName", "eoemarket客户端");
list.add(map1);
list.add(map2);
return list;
}
2} DatePicker
DatePicker就是设置时间的控件。DatePicker 使用很简单,不需要声明控件。
1)声明一个监听器,使用匿名内部类
所谓内部类就是把一个类定义在另一个类的内部,匿名就是没有名字的类
//监听器,用户监听用户点下DatePikerDialog的set按钮时,所设置的年月日
DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
System.out.println(year + "-" + monthOfYear + "-" + dayOfMonth);
}
};
DatePickerDialog.OnDateSetListener 这个'.'说明OnDateSetListener是一个接口,这个接口是声明在DatePickerDialog这个类里面的.
onDateSetListener 当时间设置好后,按下set按键,就会触发.
new DatePickerDialog.OnDateSetListener() 既然OnDateSetListener是一个接口,而在java中接口是不能用new生成对象的.(在java中抽象类,接口 中可能含有抽象函数,所以不能用new声明对象.) 但这里为什么可以用new呢?
因为这里使用了匿名内部类的方法.在构造函数后紧跟着一个大括号{},在这个{}中有一个public void onDateSet 方法,这个方法就实现了OnDateSetListener抽象方法.所以这个OnDateSetListener.接口已经在后面的{ }中实现了.
实现一个接口,必须要有类,但这里并没有类? 这就是匿名内部类的方法, { }想当于实现了一个类,但这个类并没有名字.
2)复写onCreateDialog(int id)方法:
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_PICKER_ID:
return new DatePickerDialog(this, onDateSetListener, 2013, 11, 25);
}
return null;
}
3)在你需要的时候调用 showDialog方法:
showDialog(DATE_PICKER_ID);
调用showDialog()时 就会去调用onCreateDialog 这个函数.
4)代码
public class MainActivity extends Activity {
private Button showDatePickerButton = null;
//该常量用于标识DatePickerDialog
private static final int DATE_PICKER_ID = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
showDatePickerButton = (Button) findViewById(R.id.showDatePickerButton);
showDatePickerButton.setOnClickListener(new ButtonListener());
}
private class ButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
//此方法用于显示DatePickerDialog
showDialog(DATE_PICKER_ID);
}
}
//监听器,用户监听用户点下DatePikerDialog的set按钮时,所设置的年月日
DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
System.out.println(year + "-" + monthOfYear + "-" + dayOfMonth);
}
};
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_PICKER_ID:
return new DatePickerDialog(this, onDateSetListener, 2010, 11, 25);
}
return null;
}
}