【发布时间】:2015-01-08 07:29:17
【问题描述】:
我正在尝试从日期选择器小部件中隐藏年份字段。这可能看起来像是一个重复的问题,但之前的问题给出的答案并没有帮助我隐藏年份字段..
这是我的代码::
@Override
protected void onCreate(Bundle savedInstanceState) {
int month = 0;
int year = 0;
int day = 0;
OnDateSetListener datePickerListener = null;
CustomDatePickerDialog dp = new CustomDatePickerDialog(getBaseContext(), android.R.style.Theme_Holo_Light_Dialog, datePickerListener, year, month, day);
DatePickerDialog obj = dp.getPicker();
picker = (DatePicker) findViewById(R.id.datePicker1);
try {
java.lang.reflect.Field[] f = obj.getClass().getDeclaredFields();
// Field f[] = picker.getClass().getDeclaredFields();
for (java.lang.reflect.Field field : f) {
if (field.getName().equals("prabs")) {
field.setAccessible(true);
DatePicker datePicker = (DatePicker) field.get(obj);
java.lang.reflect.Field datePickerFields[] = obj.getClass().getDeclaredFields();
for (java.lang.reflect.Field datePickerField : datePickerFields) {
if ("mYearPicker".equals(datePickerField.getName()) || "mYearSpinner".equals(datePickerField
.getName()))
{
datePickerField.setAccessible(true);
Object yearPicker = new Object();
yearPicker = datePickerField.get(datePicker);
((View) yearPicker).setVisibility(View.GONE);
}
}
/* Object yearPicker = new Object();
yearPicker = field.get(picker);
((View) yearPicker).setVisibility(View.GONE);*/
}
}
}
catch (SecurityException e) {
Log.d("ERROR", e.getMessage());
}
catch (IllegalArgumentException e) {
Log.d("ERROR", e.getMessage());
}
catch (IllegalAccessException e) {
Log.d("ERROR", e.getMessage());
}
obj.show();
}
在主类之外::
class CustomDatePickerDialog extends DatePickerDialog implements OnDateChangedListener
{
private DatePickerDialog prabs;
@SuppressLint("NewApi")
public CustomDatePickerDialog(Context context, int theme,
OnDateSetListener listener, int year, int monthOfYear,
int dayOfMonth)
{
super(context, theme, listener, year, monthOfYear, dayOfMonth);
// TODO Auto-generated constructor stub
prabs = new DatePickerDialog(context, theme, listener, year, monthOfYear, dayOfMonth);
prabs.getDatePicker().init(2015, 01, 8, this);
updateTitle(monthOfYear,dayOfMonth);
}
private void updateTitle(int Month, int Day)
{
// TODO Auto-generated method stub
Calendar mCalendar = Calendar.getInstance();
mCalendar.set(Calendar.MONTH, Month);
mCalendar.set(Calendar.DAY_OF_MONTH, Day);
prabs.setTitle(getFormat().format(mCalendar.getTime()));
}
public SimpleDateFormat getFormat() {
// TODO Auto-generated method stub
return new SimpleDateFormat("MMM, dd");
}
public void onDateChanged(DatePicker view,int year, int month,int day)
{
updateTitle(month,day);
}
public DatePickerDialog getPicker()
{
return this.prabs;
}
}
在添加 obj.show(); 之前,它使用日历显示整个小部件,但我只想要带有日期和月份的小部件
试图从很多天解决这个问题。但每次都失败:( 任何建议都会有很大帮助.. 谢谢。。
编辑::
year 字段表示 Eclipse 的日期选择器部件的年份字段
我提到了How to display year only in date picker in android 和Custom Date Picker Dialog
错误日志::
01-09 11:26:20.780: E/AndroidRuntime(23840): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application this is a crash report
【问题讨论】:
-
任何人都可以帮助解决这个问题
-
这个任务仍然很麻烦:/
-
您在使用此代码时遇到了什么问题,其次,如果您遇到了崩溃,请在此处粘贴崩溃日志,这将有助于更好地调查问题
-
感谢您的关注@Usman..在添加 obj.show() 之前,它正在使用日历显示小部件,但它甚至没有进入该页面,,..我无法追踪哪里出了问题
-
你在什么设备上测试?
标签: android datepicker field