Cambiar el tema de TimePickerDialog para usar AppTheme
He implementado un TimePickerDialog
usando el siguiente código como se da en developer.android.com :
public static class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the current time as the default values for the picker final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); // Create a new instance of TimePickerDialog and return it return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); } public void onTimeSet(TimePicker view, int hourOfDay, int minute) { // Do something with the time chosen by the user }
}
Tengo un diálogo como este:
Quiero cambiar el tema del TimePickerDialog
para ir con el AppTheme
que extiende un tema de AppCompat
. Cuando hago uso del otro constructor según lo dicho por alguno, el tema trabaja, pero el Dialog
va fullscreen. El código que usé para eso fue:
// Create a new instance of TimePickerDialog and return it return new TimePickerDialog(getActivity(), R.style.AppTheme, this, hour, minute, DateFormat.is24HourFormat(getActivity()));
Entiendo esto:
¿Cómo hago esto? – Quiero que el Dialog
permanezca igual, pero cambie sólo los colores de acento. ¡Gracias!
Tienes que usar Theme.AppCompat.Light.Dialog
como Parent Theme
styles.xml
definir el tema de Dialog
en styles.xml
.
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog"> <item name="colorAccent">@color/purple</item> <item name="colorControlNormal">@color/orange</item> </style>
Entonces úsalo así:
// Create a new instance of TimePickerDialog and return it return new TimePickerDialog(getActivity(), R.style.DialogTheme, this, hour, minute, DateFormat.is24HourFormat(getActivity()));
Espero que esto te ayude.
Podemos cambiar el tema como se muestra en el siguiente ejemplo.
@Override public Dialog onCreateDialog(Bundle savedInstanceState){ // Get a Calendar instance final Calendar calendar = Calendar.getInstance(); // Get the current hour and minute int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); /* Creates a new time picker dialog with the specified theme. TimePickerDialog(Context context, int themeResId, TimePickerDialog.OnTimeSetListener listener, int hourOfDay, int minute, boolean is24HourView) */ // TimePickerDialog Theme : THEME_DEVICE_DEFAULT_LIGHT TimePickerDialog tpd = new TimePickerDialog(getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT,this,hour,minute,false); // TimePickerDialog Theme : THEME_DEVICE_DEFAULT_DARK TimePickerDialog tpd2 = new TimePickerDialog(getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_DARK,this,hour,minute,false); // TimePickerDialog Theme : THEME_HOLO_DARK TimePickerDialog tpd3 = new TimePickerDialog(getActivity(), AlertDialog.THEME_HOLO_DARK,this,hour,minute,false); // TimePickerDialog Theme : THEME_HOLO_LIGHT TimePickerDialog tpd4 = new TimePickerDialog(getActivity(), AlertDialog.THEME_HOLO_LIGHT,this,hour,minute,false); // TimePickerDialog Theme : THEME_TRADITIONAL TimePickerDialog tpd5 = new TimePickerDialog(getActivity(), AlertDialog.THEME_TRADITIONAL,this,hour,minute,false); // Return the TimePickerDialog return tpd; } public void onTimeSet(TimePicker view, int hourOfDay, int minute){ // Do something with the returned time TextView tv = (TextView) getActivity().findViewById(R.id.tv); tv.setText("HH:MM\n" + hourOfDay + ":" + minute); }
}
Para ver ejemplos más detallados, consulte este tutorial
Espero que esto ayude.