How can I add new button in date picker widget in android?
Just add a neutral button.
DatePickerDialog dialog = new DatePickerDialog(context, 0, callback, year, month, day);dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "Name", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //Your code }});
Simply create this class!
import android.app.DatePickerDialog;import android.content.Context;public class DatePickerWithNeutral extends DatePickerDialog { public DatePickerWithNeutral(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) { super(context, 0, callBack, year, monthOfYear, dayOfMonth); setButton(BUTTON_POSITIVE, ("Ok"), this); setButton(BUTTON_NEUTRAL, ("Something"), this); // ADD THIS setButton(BUTTON_NEGATIVE, ("Cancel"), this); }}
Then use this to add functionality to it!
date.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(getApplicationContext(), "Neutral Button Clicked!", Toast.LENGTH_LONG).show(); }});
Looks like this
Enjoy :)
This is how I implemented the "Clear" button in my app. When the user clicks Clear, the year/month/day values are all 0. You can use onDateSet() in your app for both the Set button and Clear button this way.
I referenced the Android source code (\frameworks\base\core\java\android\app\DatePickerDialog.java).
I also used the help of esilver.
public class DatePickerDialogPlus extends DatePickerDialog { private final DatePicker mDatePicker; private final OnDateSetListener mCallBack; /** * @param context The context the dialog is to run in. * @param callBack How the parent is notified that the date is set. * @param year The initial year of the dialog. * @param monthOfYear The initial month of the dialog. * @param dayOfMonth The initial day of the dialog. */ public DatePickerDialogPlus(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) { super(context, 0, callBack, year, monthOfYear, dayOfMonth); mCallBack = callBack; Context themeContext = getContext(); setButton(BUTTON_POSITIVE, themeContext.getText(R.string.datePicker_setButton), this); setButton(BUTTON_NEUTRAL, themeContext.getText(R.string.datePicker_clearButton), this); setButton(BUTTON_NEGATIVE, themeContext.getText(R.string.datePicker_cancelButton), null); setIcon(0); setTitle(R.string.datePicker_title); LayoutInflater inflater = (LayoutInflater) themeContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.date_picker_dialog, null); setView(view); mDatePicker = (DatePicker) view.findViewById(R.id.datePicker); mDatePicker.init(year, monthOfYear, dayOfMonth, this); } @Override public void onClick(DialogInterface dialog, int which) { if (mCallBack != null) { if (which == BUTTON_POSITIVE) { mDatePicker.clearFocus(); mCallBack.onDateSet(mDatePicker, mDatePicker.getYear(), mDatePicker.getMonth(), mDatePicker.getDayOfMonth()); } else if (which == BUTTON_NEUTRAL) { mDatePicker.clearFocus(); mCallBack.onDateSet(mDatePicker, 0, 0, 0); } } }}