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:

Introduzca aquí la descripción de la imagen

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:

Introduzca aquí la descripción de la imagen

¿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.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.