Aus unserer Kundennachfrage wollen wir den HOLO-Stil auf dem DatePickerDialog für alle Android OS-Versionen beibehalten. DatePicker auf Android 7
Aber es scheint auf Android 7 nicht richtig zu funktionieren:
Von meiner Implementierung:
%Vor%Es funktioniert gut für frühere Android 7. Jeder hat das gleiche Problem?
Bearbeitet: Lösung wurde in API 25 behoben Ссылка
Ich benutze DatePickerDialog
, um Benutzer auf ihre Geburtstage hinzuweisen. Leider habe ich einige Beschwerden von Benutzern über den Material-Themen-Dialog erhalten, als ich es ausprobiert habe. Daher ist es für mich keine Option, zu diesem Thema zu wechseln: Ich muss mich an den Holo-Dialog halten.
Es stellt sich heraus, dass Android 7.0 mit einem Fehler ausgeliefert wurde: Der Versuch, das Holo-Thema auf dieser Plattform zu verwenden, greift stattdessen auf ein gebrochenes Material-Thema für DatePickerDialog
zurück. Sehen Sie diese zwei Fehlerberichte:
Ich habe eine modifizierte Form von dieser Problemumgehung von Jeff Lockhart verwendet, auf die in diesen Fehlerberichten verwiesen wurde:
%Vor%Was das bedeutet ist:
DatePicker mDatePicker
-Feld, das zu diesem Dialog gehört DatePickerDelegate mDelegate
-Feld, das zu diesem Dialog gehört DatePickerSpinnerDelegate
ist (der Typ des gewünschten Delegaten) DatePicker
, da sie die Widgets des Materialkalenders sind DatePickerSpinnerDelegate
und weisen Sie sie dem Feld mDelegate
von mDatePicker
dieses Dialogfelds zu mDatePicker
erneut mit Kalenderinformationen und einigen Parametern, um die Spinner aufzublasen Um diese Problemumgehung zu verwenden, erstelle ich ein ContextThemeWrapper
um mein Context
, was mir erlaubt ein Thema zu setzen, in diesem Fall Holo:
Hinweise :
try {...} catch (Exception e) {/* NOP */}
-Block zu legen, so dass, wenn eine der Reflektionen fehlschlägt, nichts passiert und das (leider gebrochene) Standard-Fallback verwendet wird. TimePickerDialog
, der unter einem ähnlichen Problem litt. Ich habe es so geändert, dass es stattdessen mit DatePickerDialog
funktioniert, und ich habe die Lösung vereinfacht, damit sie weniger generisch und spezifischer für meinen genauen Anwendungsfall ist. Sie können jedoch die vollständigere Originalversion verwenden und sie nur für Date
anstelle von Time
. Die Datumsauswahl hat einen eigenen Stil Ссылка
Ich denke du brauchst R.style.Widget.Holo.DatePicker
anstatt AlertDialog.THEME_HOLO_LIGHT
. Es ist möglich, dass Sie möglicherweise Ihren eigenen leeren Stil erstellen müssen, der @android:style/Widget.Holo.DatePicker
als übergeordnetes Element hat und diesen verwendet.
Versuchen Sie zu folgen, es funktioniert. Ich habe es getestet. Und es hat keine leeren Lücken.
Auch mDatePickerListener
ist mein DatePickerListner, den Sie erstellen können.