Настроить имя DatePickerDialog навсегда
У меня проблема, когда я пытаюсь установить имя DatePickerDialog навсегда.
DatePickerFragment.java
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
DatePickerDialog dpd = new DatePickerDialog(getActivity(), this, year, month, day);
dpd.setTitle("set date");
return dpd;
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
}
}
MainActivity.java
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
});
}
}
Когда я нажимаю кнопку DatePickerDialog показывает, и заголовок диалогового окна "задана дата", но когда я меняю дату, название содержит выбранную дату, а не "установить дату". Как я могу установить этот заголовок диалога навсегда?
Протестировано по API 8-10.
Спасибо вам заранее и извините за мой английский. Патрик
Ответы
Ответ 1
Как насчет расширения DatePickerDialog
и добавления метода setPermanentTitle
для хранения постоянного заголовка, который будет принудительно изменен при изменении даты?
public class MyDatePickerDialog extends DatePickerDialog {
private CharSequence title;
public MyDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {
super(context, callBack, year, monthOfYear, dayOfMonth);
}
public void setPermanentTitle(CharSequence title) {
this.title = title;
setTitle(title);
}
@Override
public void onDateChanged(DatePicker view, int year, int month, int day) {
super.onDateChanged(view, year, month, day);
setTitle(title);
}
}
И затем используйте новый метод setPermanentTitle
:
MyDatePickerDialog dpd = new MyDatePickerDialog(this, null, 2012, 10, 10);
dpd.setPermanentTitle("set date");
Ответ 2
Расширьте DatePickerDialog и переопределите метод setTitle().
public class MyDatePickerDialog extends DatePickerDialog {
public MyDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {
super(context, callBack, year, monthOfYear, dayOfMonth);
}
public void setTitle(CharSequence title) {
super.setTitle(*<whatever title you want>*);
}
}
Ответ 3
Вы всегда можете использовать AlertDialog
и вызывать setView
, передавая экземпляр DatePicker
.
См. пример кода ниже:
DatePicker datePicker = new DatePicker(getActivity());
datePicker.setCalendarViewShown(false);
new AlertDialog.Builder(getActivity())
.setTitle("Your title")
.setView(datePicker)
.create().show();
Это гарантирует, что заголовок будет установлен только вами.
Ответ 4
Учитывая опыт пользователей на небольших экранах, я бы предложил не сохранять постоянный титул. Вот модификация кода Джона:
public class MyDatePickerDialog extends DatePickerDialog {
private CharSequence title;
public MyDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth, CharSequence title) {
super(context, callBack, year, monthOfYear, dayOfMonth);
this.title = title;
setTitle(title);
}
@Override
public void onDateChanged(DatePicker view, int year, int month, int day) {
super.onDateChanged(view, year, month, day);
if (getDatePicker().getCalendarViewShown()) {
setTitle(title);
}
}
}
И вызовите DatePickerDialog
следующим образом:
MyDatePickerDialog datePickerDialog = new MyDatePickerDialog(this, null, 2012, 10, 10, "My Title");
Ответ 5
Создайте настраиваемый заголовок следующим образом:
TextView title = new TextView(getActivity());
title.setText(getResources().getString(R.string.calendar_start_title));
datePickerDialog.setCustomTitle(title);