java - style - Establecer DatePickerDialog título de forma permanente
dialog date android (5)
¿Qué tal extender el DatePickerDialog
y agregar un método setPermanentTitle
para almacenar un título permanente que se setPermanentTitle
cuando se cambie la fecha?
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);
}
}
Y luego use el nuevo método setPermanentTitle
:
MyDatePickerDialog dpd = new MyDatePickerDialog(this, null, 2012, 10, 10);
dpd.setPermanentTitle("set date");
Tengo un problema cuando intento establecer el título DatePickerDialog de forma permanente.
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");
}
});
}
}
Cuando hago clic en el botón, DatePickerDialog muestra y el título del diálogo es "fecha establecida", pero cuando cambio la fecha, el título contiene la fecha seleccionada en lugar de la "fecha establecida". ¿Cómo puedo configurar este título de diálogo de forma permanente?
Probado en API 8-10.
Gracias de antemano y lo siento por mi inglés. Patricio
Crea un título personalizado de la siguiente manera:
TextView title = new TextView(getActivity());
title.setText(getResources().getString(R.string.calendar_start_title));
datePickerDialog.setCustomTitle(title);
Extienda DatePickerDialog y anule el método 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>*);
}
}
Siempre puede usar un AlertDialog
y llamar a setView
pasando una instancia de DatePicker
.
Ver código de ejemplo a continuación:
DatePicker datePicker = new DatePicker(getActivity());
datePicker.setCalendarViewShown(false);
new AlertDialog.Builder(getActivity())
.setTitle("Your title")
.setView(datePicker)
.create().show();
Esto asegurará que el título solo lo establezca usted.
Teniendo en cuenta la experiencia del usuario en pantallas más pequeñas, sugeriría no mantener el título permanente. Aquí está la modificación al código de John:
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);
}
}
}
Y llame al DatePickerDialog
siguiente manera:
MyDatePickerDialog datePickerDialog = new MyDatePickerDialog(this, null, 2012, 10, 10, "My Title");