在Android中可以自行搭配年月日显示的datepickerdialog,现在网上大多数流传的版本存在的问题是没有根部sdk不同的版本做处理,以下展示的自定义的datepickerdialog没有任何问题,可以直接使用。
/**
*
*/
package com.leshenghuo.version.settings;
import android.app.DatePickerDialog;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.DatePicker;
/**
* @author song
* 自定义的日期控件,只有年和月,没有日
* 2015-03-26 下午16:58:10
*/
public class NoDayPickerDialog extends DatePickerDialog {
public NoDayPickerDialog(Context context,
OnDateSetListener callBack, int year, int monthOfYear) {
super(context, callBack, year, monthOfYear, 3);
this.setTitle(year+"年"+(monthOfYear + 1) + "月" );
}
public void onDateChanged(DatePicker view, int year, int month, int day) {
super.onDateChanged(view, year, month, day);
this.setTitle(year+"年"+(month + 1) + "月" );
}
public void show() {
super.show();
DatePicker dp = findDatePicker((ViewGroup) this.getWindow().getDecorView());
if (dp != null) {
int SDKVersion;
//获取当前设备版本信息,sdk版本不一样做不用的处理
SDKVersion = Integer.valueOf(android.os.Build.VERSION.SDK);
if (SDKVersion < 11) {
//第二个getChildAt()对应的0,1,2分别代表年月日,可以根据需要自行调整
((ViewGroup) dp.getChildAt(0)).getChildAt(2).setVisibility(
View.GONE);
} else if (SDKVersion > 14) {
//第三个getChildAt()对应的0,1,2分别代表年月日,可以根据需要自行调整
View view2 = ((ViewGroup) ((ViewGroup) dp.getChildAt(0))
.getChildAt(0)).getChildAt(2);
view2.setVisibility(View.GONE);
}
}
}
// 从当前Dialog中查找DatePicker子控件
private DatePicker findDatePicker(ViewGroup group) {
if (group != null) {
for (int i = 0, j = group.getChildCount(); i < j; i++) {
View child = group.getChildAt(i);
if (child instanceof DatePicker) {
return (DatePicker) child;
} else if (child instanceof ViewGroup) {
DatePicker result = findDatePicker((ViewGroup) child);
if (result != null)
return result;
}
}
}
return null;
}
}