How to add a new button to the date picker widget in android?

I want to add a new button, which is the “Clear” button, a date picker and a time picker in an Android app. By default, these widgets have two buttons; they are installed and canceled. How to add another button to this button

Is it possible? If so, can you give an example?

thanks

+6
source share
4 answers

This is how I applied the “Clear” button in my application. When the user clicks “Clear”, the values ​​of year / month / day are 0. You can use onDateSet () in your application for the “Install” and “Clear” buttons this way.

I referenced the Android source code (\ frameworks \ base \ core \ java \ android \ app \ DatePickerDialog.java).

I also used esilver help.

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); } } } } 
+4
source

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 } }); 
+20
source

Just 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

enter image description here

Enjoy :)

+6
source

The question also related to adding the Clear button to TimePicker, which brought me here.

For everyone who is interested, here's how to do it for TimePicker in a snippet of dialogue.

 import android.app.Dialog; import android.app.DialogFragment; import android.app.TimePickerDialog; import android.content.DialogInterface; import android.os.Bundle; import android.widget.TextView; import android.widget.TimePicker; import java.util.Calendar; public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener, TimePickerDialog.OnClickListener { private static final String HOURS_ARG_KEY = "hours"; private static final String MINUTES_ARG_KEY = "minutes"; private static final String TARGET_ARG_KEY = "target"; public static TimePickerFragment newInstance(int hours, int minutes, int targetResId,...other values...) { TimePickerFragment tpf = new TimePickerFragment(); Bundle args = new Bundle(); //Setup the TimePickerFragment with some args if required. args.putInt(HOURS_ARG_KEY, hours); args.putInt(MINUTES_ARG_KEY, minutes); args.putInt(TARGET_ARG_KEY, targetResId); tpf.setArguments(args); return tpf; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the current time as the default values for the picker if we get nothing from // from the arguments. final Calendar c = Calendar.getInstance(); int hour = getArguments().getInt(HOURS_ARG_KEY,c.get(Calendar.HOUR_OF_DAY)); int minute = getArguments().getInt(MINUTES_ARG_KEY, c.get(Calendar.MINUTE)); // Create a new instance of TimePickerDialog and return it TimePickerDialog tpd = new TimePickerDialog(getActivity(), this, hour, minute, false); // And add the third button to clear the target field. tpd.setButton(DialogInterface.BUTTON_NEUTRAL,getActivity().getText(R.string.clear), this); return tpd; } public void onTimeSet(TimePicker view, int hourOfDay, int minute) { // Do something with the time chosen by the user int target = getArguments().getInt(TARGET_ARG_KEY,0); //Get reference of host activity (XML Layout File) TextView widget TextView txt = (TextView) getActivity().findViewById(target); //Format the hourOfDay and minute values, then display the user changed time on the TextView txt.setText(...FORMATTED TIME...); } @Override public void onClick(DialogInterface dialog, int which) { if(which == DialogInterface.BUTTON_NEUTRAL) { int target = getArguments().getInt(TARGET_ARG_KEY,0); //Get reference of host activity (XML Layout File) TextView widget TextView txt = (TextView) getActivity().findViewById(target); //Clear the field. txt.setText(""); } } } 

Then load it from your operation:

 TimePickerFragment tpf = TimePickerFragment.newInstance(...args...); tpf.show(getFragmentManager(), "timePicker"); 
0
source

Source: https://habr.com/ru/post/905001/


All Articles