本文介绍如何将原来日历表的形式改为滑动形式,设计自己的自定义风格日期选择,总的分为对话框布局页面+对应的对话框代码+活动的引用。
一、对话框布局页面
主要的控件DatePicker如下:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<DatePicker
android:id="@+id/dp_sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:calendarViewShown="false"
android:spinnersShown="true"
android:datePickerMode="spinner"/>
</LinearLayout>
二、对应的对话框代码
构造函数+年月日和变更器+对话框显示与关闭+日期变更监听器接口
2.1 构造函数
public Datedialog(Context context){
//绑定布局页面及控件
view = LayoutInflater.from(context).inflate(R.layout.datedialog,null);
btn_choosedate = (Button)view.findViewById(R.id.btn_choosedate);
dp_sp = (DatePicker)view.findViewById(R.id.dp_sp);
dl_date = new Dialog(context,R.style.CustomDateDialog);
btn_choosedate.setOnClickListener(this);
}
用于页面绑定、控件绑定、风格设置等。其中对话框页面风格如下:
<style name="CustomDateDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">#CCDDCC</item>
<item name="android:windowIsTranslucent">true</item>
</style>
2.2 定义日期变更监听器接口
public interface myDateSetListener{
void myDateSet(int year,int month,int day);
}
2.3 设置年月日和变更器
private myDateSetListener listener;
//设置日期对话框内部的年月日以及日期变更监听器
public void setDate(int year, int month, int day, myDateSetListener mlistener){
dp_sp.init(year,month,day,null);
listener = mlistener;
}
2.4 对话框的显示与关闭
public void showDialog(){
//设置对话框窗口视图
dl_date.getWindow().setContentView(view);
//设置对话框窗口布局
dl_date.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//显示
dl_date.show();
}
//关闭对话框
public void dismissDialog(){
if(dl_date!=null&& dl_date.isShowing()){
dl_date.dismiss();
}
}
2.5 点击确认按钮后的响应
@Override
public void onClick(View v){
if(v.getId()==R.id.btn_choosedate){
dismissDialog();
if(listener!=null){
dp_sp.clearFocus();
//回调监听器的myDateSet()
listener.myDateSet(dp_sp.getYear(),dp_sp.getMonth()+1,dp_sp.getDayOfMonth());
}
}
}
三、活动的引用
3.1 定义日期变更监听器实现自定义的变更器接口
//定义日期变更监听器实现自定义的变更器接口
class myDateListener implements Datedialog.myDateSetListener{
@Override
public void myDateSet(int year,int month,int day){
tv_date.setText(String.format("%d年%d月%d日",year,month,day));
}
}
3.2 自定义日期对话框
//自定义日期对话框
public void showDateDialog(){
Calendar calendar = Calendar.getInstance();
Datedialog datedialog = new Datedialog(this);
//设置日期对话框的年月日,指定日期变更器
datedialog.setDate(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH),new myDateListener());
datedialog.showDialog();
}
四、实现效果