Czy można zmienić schemat kolorów selektora dat (i timepicker) dla Androida 5.0?
Próbowałem ustawić kolory akcentów, ale to nie działa (zarówno z, jak i bez android:
):
<!-- colorPrimary is used for the default action bar background -->
<item name="colorPrimary">@color/purple</item>
<!-- colorPrimaryDark is used for the status bar -->
<item name="colorPrimaryDark">@color/purple_tint</item>
<!-- colorAccent is used as the default value for colorControlActivated
which is used to tint widgets -->
<item name="colorAccent">@color/purple_tint</item>
Od oryginału:
Do czegoś takiego:
android
dialog
styles
background-color
Warpzit
źródło
źródło
Odpowiedzi:
Powodem, dla którego sugestia Neila powoduje wyświetlenie pełnego ekranu,
DatePicker
jest wybór motywu macierzystego:Ponadto, jeśli wybierzesz tę trasę, musisz określić motyw podczas tworzenia
DatePickerDialog
:Moim zdaniem to nie jest dobre. Należy starać się unikać stylizacji z javy i wewnątrz styles.xml / themes.xml.
Zgadzam się, że sugestia Neila, z niewielką zmianą (zmiana motywu nadrzędnego, aby powiedzieć,
Theme.Material.Light.Dialog
) przyniesie pożądany rezultat. Ale oto inny sposób:Przy pierwszej inspekcji natrafiamy na
datePickerStyle
takie rzeczy, jak:headerBackground
(co próbujesz zmienić)dayOfWeekBackground
oraz kilka innych kolorów i stylów tekstu.Zastąpienie tego atrybutu w motywie aplikacji nie zadziała.
DatePickerDialog
używa osobnego motywu, który można przypisać przez atrybutdatePickerDialogTheme
. Tak więc, aby nasze zmiany odniosły skutek, musimy nadpisaćdatePickerStyle
wewnątrz nadpisaniadatePickerDialogTheme
.No to ruszamy:
Zastąp
datePickerDialogTheme
w motywie podstawowym aplikacji:Zdefiniuj
MyDatePickerDialogTheme
. Wybór macierzystego tematem będzie zależeć od tego, co baza motyw z aplikacji jest: może to byćTheme.Material.Dialog
alboTheme.Material.Light.Dialog
:Unieważniliśmy
datePickerStyle
stylemMyDatePickerStyle
. Wybór rodzica będzie ponownie zależał od podstawowego motywu Twojej aplikacji: alboWidget.Material.DatePicker
alboWidget.Material.Light.DatePicker
. Zdefiniuj to zgodnie ze swoimi wymaganiami:Obecnie nadpisujemy tylko to,
headerBackground
które jest domyślnie ustawione na?attr/colorAccent
(dlatego też sugestia Neila działa przy zmianie tła). Ale istnieje wiele możliwości dostosowania:Jeśli nie chcesz takiej kontroli (dostosowywania), nie musisz nadpisywać
datePickerStyle
.colorAccent
kontroluje większośćDatePicker's
kolorów. Zatem nadpisywanie tylko wcolorAccent
środkuMyDatePickerDialogTheme
powinno działać:Zastępowanie
colorAccent
daje dodatkową korzyść w postaci zmianyOK
&CANCEL
kolorów tekstu. Nie jest zły.W ten sposób nie musisz podawać konstruktorowi żadnych informacji o stylizacji
DatePickerDialog's
. Wszystko zostało prawidłowo okablowane:źródło
Spróbuj.
Kod
Styl w pliku styles.xml
EDYCJA - zgodnie z sugestią zmieniono motyw na Theme.AppCompat.Light.Dialog
źródło
parent="Theme.AppCompat.Light.Dialog"
zamiastparent="Theme.AppCompat.Light"
Utwórz nowy styl
Kod Java:
Motyw rodzicielski jest tutaj kluczowy. Wybierz swój kolor
Wynik:
źródło
spróbuj tego, pracuj dla mnie
Umieść dwie opcje
colorAccent
iandroid:colorAccent
źródło
Wystarczy wspomnieć, że
android.R.style.Theme_DeviceDefault_Light_Dialog
zamiast tego możesz użyć domyślnego motywu, takiego jak .źródło
Nie masz motywu tworzenia, po prostu zapisz go w obiekcie tworzenia okna dialogowego
podążaj za tym, to da ci wszystkie style wyboru daty, to naprawdę działa
http://www.android-examples.com/change-datepickerdialog-theme-in-android-using-dialogfragment/
źródło
Miałem problem z tym, że przyciski selektora czasu nie były widoczne na ekranie API 24 w Androidzie. (API 21+) rozwiązuje
źródło
źródło
W przypadku zmiany koloru tekstu pozycji listy roku (SPECYFICZNE DLA ANDROIDA 5.0)
Po prostu ustaw określony kolor tekstu w stylu okna dialogowego selektora dat. Z jakiegoś powodu ustawienie flagi
yearListItemTextAppearance
nie odzwierciedla żadnej zmiany na liście lat.źródło