咱们先在简单地XML给显示日期和弹出日期分别加个控件。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.dateexp.MainActivity" >
<TextView
android:id="@+id/dispaly_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/boom_date"
android:text="xxxx-xx-xx"
android:textSize="35sp" />
<Button
android:id="@+id/boom_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/dispaly_date"
android:text="弹出"/>
</RelativeLayout>
将这样显示:
接下来是在Main_Activity.java文件里对控件的操作:
package com.example.dateexp;
import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
public class MainActivity extends Activity {
int tyear,tmonth,tday;//年月日
TextView display_date;
Button boom_date;
final int DATA_DIOLOG = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display_date = (TextView)findViewById(R.id.dispaly_date);
boom_date = (Button)findViewById(R.id.boom_date);
boom_date.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
showDialog(DATA_DIOLOG);//显示日期窗口
}
});
final Calendar ca = Calendar.getInstance();//实例个日历
tyear = ca.get(Calendar.YEAR);
tmonth = ca.get(Calendar.MONTH);
tday = ca.get(Calendar.DAY_OF_MONTH);
}
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATA_DIOLOG:
return new DatePickerDialog(this, mdateListener, tyear, tmonth, tday);
}
return null;
}
// 设置日期 利用StringBuffer追加
public void display() {
display_date.setText(new StringBuffer().append(tyear).append("年").append(tmonth + 1).append("月").append(tday).append("日"));
}//textview控件显示格式
//监听(DatePickerDialog为系统自带日历)
private DatePickerDialog.OnDateSetListener mdateListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
tyear = year;
tmonth = monthOfYear;
tday = dayOfMonth;
display();//textview控件显示
}
};
}
然后运行:
这就成功给Activity添加了一个简单的日历选择器。
那我们怎么使得APP一打开,TextView就显示现在的日期呢?
直接在onCreate里面添加以下代码即可:
String DateString = DateFormat.getDateInstance().format(new Date());
display_date.setText(DateString);//默认显示当前日期
部分如图:
下面来记录添加这个日历时遇到的问题:
1.为什么要设置变量final int DATA_DIOLOG = 1?(从文中的showDialog(int id)、onCreateDialog(int id)解释)
答:showDialog(int id):当你想要显示一个对话框时,调用showDialog(int id) 方法并传递一个唯一标识这个对话框的整数。当对话框第一次被请求时,Android从你的Activity中调用onCreateDialog(int id),你应该在这里初始化这个对话框Dialog。这个回调方法被传以和showDialog(int id)相同的ID。所以这里就对应了onCreateDialog(int id)方法的case后面的id。
onCreateDialog(int id)是什么:当你使用这个回调函数时,Android系统会有效的设置这个Activity为每个对话框的所有者,从而自动管理每个对话框的状态并挂靠到Activity上。(所以当你使用这个函数的时候,它将挂起多个对话框,然后当你触发的showDialog里面的ID对应上其case后面的id,那么相应的对话框将弹出。)
综合上面两个函数的解释,那就可以解释为何定义int DATA_DIOLOG = 1了。它就是个窗口的标识。