如何在android中的日期选择器小部件中添加新按钮?
我想在我的android应用程序中添加一个新的按钮,即clear按钮,用于日期选择器小部件和时间选择器小部件。默认情况下,这些小部件有两个按钮,set和cancel。如何在这两个按钮上再添加一个按钮 可能吗?如果是,你能举一些例子吗如何在android中的日期选择器小部件中添加新按钮?,android,time,widget,picker,timepicker,Android,Time,Widget,Picker,Timepicker,我想在我的android应用程序中添加一个新的按钮,即clear按钮,用于日期选择器小部件和时间选择器小部件。默认情况下,这些小部件有两个按钮,set和cancel。如何在这两个按钮上再添加一个按钮 可能吗?如果是,你能举一些例子吗 谢谢这就是我在应用程序中实现“清除”按钮的方式。当用户单击“清除”时,年/月/日值均为0。您可以通过这种方式在应用程序中使用onDateSet()来设置按钮和清除按钮 我引用了Android源代码(\frameworks\base\core\java\Android
谢谢这就是我在应用程序中实现“清除”按钮的方式。当用户单击“清除”时,年/月/日值均为0。您可以通过这种方式在应用程序中使用onDateSet()来设置按钮和清除按钮 我引用了Android源代码(\frameworks\base\core\java\Android\app\DatePickerDialog.java) 我还利用了他的帮助
只需创建这个类
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);
}
}
然后用它来添加功能
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();
}
});
看起来像这样
享受:)只需添加一个中性按钮
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
}
});
这个问题还提到了在计时器上添加一个清除按钮,这就是我来这里的原因 对于任何感兴趣的人来说,下面是如何在对话框片段中为时间选择器执行此操作
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("");
}
}
}
然后,从活动中加载它:
TimePickerFragment tpf = TimePickerFragment.newInstance(...args...);
tpf.show(getFragmentManager(), "timePicker");
假设您想添加一个名为CLEAR的新按钮,该按钮将清除选定的日期
val calendar = Calendar.getInstance()
val yy = calendar.get(Calendar.YEAR)
val mm = calendar.get(Calendar.MONTH)
val dd = calendar.get(Calendar.DAY_OF_MONTH)
val datePicker = DatePickerDialog(this, DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
val date = (dayOfMonth.toString() + "-" + (monthOfYear + 1).toString() + "-" + year.toString())
et_date.setText(date)
}, yy, mm, dd)
datePicker.setButton(DialogInterface.BUTTON_NEUTRAL, "CLEAR") { dialog, which ->
if (which == DialogInterface.BUTTON_NEUTRAL) {
et_date.setText("")
}
}
datePicker.show()
注意:以上代码是用kotlin语言编写的。感谢您提供此代码,但在ICS中,清除和设置按钮始终无法正常工作您保存了我的一天,伙计!!
val calendar = Calendar.getInstance()
val yy = calendar.get(Calendar.YEAR)
val mm = calendar.get(Calendar.MONTH)
val dd = calendar.get(Calendar.DAY_OF_MONTH)
val datePicker = DatePickerDialog(this, DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
val date = (dayOfMonth.toString() + "-" + (monthOfYear + 1).toString() + "-" + year.toString())
et_date.setText(date)
}, yy, mm, dd)
datePicker.setButton(DialogInterface.BUTTON_NEUTRAL, "CLEAR") { dialog, which ->
if (which == DialogInterface.BUTTON_NEUTRAL) {
et_date.setText("")
}
}
datePicker.show()