ここにあるAndroidの基本的なDatePickerDialogチュートリアルを使用していますAndroidDatePicker
そして、私はそれを機能させました。でも、今年からの日付しか選べないようにしたいと思います。では、ダイアログから年を削除して、月と日だけが表示されるようにする方法はありますか?Year intを取得しようとするたびに、コードが壊れます。
ここにあるAndroidの基本的なDatePickerDialogチュートリアルを使用していますAndroidDatePicker
そして、私はそれを機能させました。でも、今年からの日付しか選べないようにしたいと思います。では、ダイアログから年を削除して、月と日だけが表示されるようにする方法はありますか?Year intを取得しようとするたびに、コードが壊れます。
はい、可能です。DatePickerには3つのNumberPickerコントロールが組み込まれており、その後に年、月、日が続き、最初に非表示になります。
final Calendar cal = Calendar.getInstance();
mDialog = new CustomerDatePickerDialog(getContext(), this,
cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
cal.get(Calendar.DAY_OF_MONTH));
mDialog.show();
DatePicker dp = findDatePicker((ViewGroup) mDialog.getWindow().getDecorView());
if (dp != null) {
((ViewGroup) dp.getChildAt(0)).getChildAt(0).setVisibility(View.GONE);
}
CustomerDatePickerDialog
class CustomerDatePickerDialog extends DatePickerDialog {
public CustomerDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {
super(context, callBack, year, monthOfYear, dayOfMonth);
}
@Override
public void onDateChanged(DatePicker view, int year, int month, int day) {
super.onDateChanged(view, year, month, day);
mDialog.setTitle((month + 1) + "-" + day + "-");
}
}
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;
}
一発ギャグ:
getDatePicker().findViewById(Resources.getSystem().getIdentifier("year", "id", "android")).setVisibility(View.GONE);
ダイアログを作成するときは、うるう年(1904など)を選択して、2月29日がカレンダーに含まれるようにしてください。
DatePickerDialog dialog = new DatePickerDialog(getContext(),
listener,
1904,
month,
dayOfMonth
);
dialog.show();
最初の子供を隠すかどうかはわかりませんが、それは良い考えです。私はこのソリューションをテストしました:
より良い解決策は、のソースコードをDatePicker
独自のパッケージに変更することです。
これははるかに優れた実装だと思います。また、OPに関するduskwuffのコメントを検討してください。これにより、日が正しく表示されなくなる可能性があります。
date_picker
<?xml version="1.0" encoding="utf-8"?>
<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/datePickerNoYear"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
CustomDatePickerDialog.java
public class DatePickerDialogNoYear extends DatePickerDialog {
public DatePickerDialogNoYear(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {
super(context, callBack, year, monthOfYear, dayOfMonth);
hideYear();
}
public DatePickerDialogNoYear(Context context, int theme, OnDateSetListener listener, int year, int monthOfYear, int dayOfMonth) {
super(context, theme, listener, year, monthOfYear, dayOfMonth);
hideYear();
}
@Override
public void setView(View view, int viewSpacingLeft, int viewSpacingTop, int viewSpacingRight, int viewSpacingBottom) {
view = findViewById(R.id.datePickerNoYear);
super.setView(view, viewSpacingLeft, viewSpacingTop, viewSpacingRight, viewSpacingBottom);
}
private void hideYear() {
try {
Field f[] = this.getClass().getDeclaredFields();
for (Field field : f) {
if (field.getName().equals("mYearPicker")) {
field.setAccessible(true);
((View) field.get(this)).setVisibility(View.GONE);
}
}
} catch (SecurityException | IllegalArgumentException | IllegalAccessException e) {
Log.d("ERROR", e.getMessage());
}
}
}
次に、他のと同じように使用しますDatePickerDialog
。幸運を!
このスレッドでは、非常に単純な解決策(前の解決策よりも多い)があります。私は今それを試していますが、正常に機能します。