Spinner 、DatePicker

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;
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 的 DatePicker 控件的样式可以通过自定义布局文件来实现,以下是一些示例代码: 1. 自定义DatePicker的布局文件,保存为date_picker_dialog.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="wrap_content" android:orientation="vertical"> <DatePicker android:id="@+id/date_picker" android:layout_width="match_parent" android:layout_height="wrap_content" android:calendarViewShown="false" android:datePickerMode="spinner" /> </LinearLayout> ``` 2. 在代码中使用自定义布局文件: ``` DatePickerDialog datePickerDialog = new DatePickerDialog(context, R.style.DatePickerDialogTheme, listener, year, month, day); datePickerDialog.setContentView(R.layout.date_picker_dialog); datePickerDialog.show(); ``` 3. 在styles.xml中定义DatePickerDialog的样式: ``` <style name="DatePickerDialogTheme" parent="Theme.AppCompat.Light.Dialog"> <item name="colorAccent">@color/colorPrimary</item> <item name="android:headerBackground">@drawable/dialog_header_background</item> <item name="android:windowBackground">@drawable/dialog_background</item> <item name="android:datePickerStyle">@style/DatePickerStyle</item> </style> <style name="DatePickerStyle" parent="android:Widget.Material.DatePicker"> <item name="android:datePickerMode">spinner</item> <item name="android:calendarTextColor">@color/colorPrimary</item> <item name="android:headerBackground">@drawable/dialog_header_background</item> </style> ``` 以上是一些示例代码,你可以根据自己的需求自定义DatePicker的样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值