timepickerdialog style studio ejemplo custom java android

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");