Frage Ändere Datepicker Dialog Farbe für Android 5.0


Ist es möglich, das Farbschema datepicker (und auch timepicker) für Android 5.0 zu ändern?

Ich habe versucht, die Akzentfarben einzustellen, aber das funktioniert nicht (mit und ohne 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>

Vom Original: enter image description here

Zu so etwas: enter image description here


74
2018-02-26 08:59


Ursprung


Antworten:


Der Grund, warum Neils Vorschlag zu einem Vollbild führt DatePicker ist die Wahl des übergeordneten Themas:

<!-- Theme.AppCompat.Light is not a dialog theme -->
<style name="DialogTheme" parent="**Theme.AppCompat.Light**">
    <item name="colorAccent">@color/blue_500</item>
</style>

Wenn Sie diese Route wählen, müssen Sie außerdem das Thema angeben, während Sie das erstellen DatePickerDialog:

// R.style.DialogTheme
new DatePickerDialog(MainActivity.this, R.style.DialogTheme, new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        //DO SOMETHING
    }
}, 2015, 02, 26).show();

Dies ist meiner Meinung nach nicht gut. Man sollte versuchen, das Styling von java und von styles.xml / themes.xml fernzuhalten.

Ich bin damit einverstanden, dass Neils Vorschlag mit ein bisschen Veränderung (Ändern des übergeordneten Themas zu sagen, Theme.Material.Light.Dialog) erhalten Sie das gewünschte Ergebnis. Aber hier ist der andere Weg:

Auf die erste Inspektion stoßen wir datePickerStyle was definiert Dinge wie: headerBackground(was du versuchst zu ändern), dayOfWeekBackgroundund ein paar andere Text- und Textstile.

Das Überschreiben dieses Attributs im Design Ihrer App funktioniert nicht. DatePickerDialog verwendet ein eigenes Thema, das durch das Attribut zugewiesen werden kann datePickerDialogTheme. Damit unsere Änderungen wirksam werden, müssen wir es tun überschreiben datePickerStyle innerhalb einer Umgehung datePickerDialogTheme.

Auf geht's:

Überschreiben datePickerDialogTheme im Basisthema deiner App:

<style name="AppBaseTheme" parent="android:Theme.Material.Light">
    ....
    <item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>

Definieren MyDatePickerDialogTheme. Die Auswahl des übergeordneten Themas hängt davon ab, was das Basisthema deiner App ist: es könnte beides sein Theme.Material.Dialog oder Theme.Material.Light.Dialog:

<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog">
    <item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
</style>

Wir haben übersteuert datePickerStyle mit dem Stil MyDatePickerStyle. Die Auswahl der Eltern hängt wieder vom Basisthema Ihrer App ab: entweder Widget.Material.DatePicker oder Widget.Material.Light.DatePicker. Definieren Sie es nach Ihren Anforderungen:

<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
    <item name="android:headerBackground">@color/chosen_header_bg_color</item>
</style>

Derzeit sind wir nur übergeordnet headerBackground welches standardmäßig auf eingestellt ist ?attr/colorAccent (Dies ist auch der Grund, warum der Neil-Vorschlag den Hintergrund verändert). Aber es ist ziemlich viel Anpassung möglich:

dayOfWeekBackground
dayOfWeekTextAppearance
headerMonthTextAppearance
headerDayOfMonthTextAppearance
headerYearTextAppearance
headerSelectedTextColor
yearListItemTextAppearance
yearListSelectorColor
calendarTextColor
calendarSelectedTextColor

Wenn Sie nicht so viel Kontrolle (Anpassung) möchten, müssen Sie nicht überschreiben datePickerStyle. colorAccent steuert die meisten DatePicker's Farben. Also, überschreibe einfach colorAccent Innerhalb MyDatePickerDialogTheme sollte arbeiten:

<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog">
    <item name="android:colorAccent">@color/date_picker_accent</item>

    <!-- No need to override 'datePickerStyle' -->
    <!-- <item name="android:datePickerStyle">@style/MyDatePickerStyle</item> -->
</style>

Überschreiben colorAccent gibt Ihnen den zusätzlichen Vorteil der Änderung OK & CANCEL Textfarben auch. Nicht schlecht.

Auf diese Weise müssen Sie keine Stylinginformationen bereitstellen DatePickerDialog's Konstrukteur. Alles wurde richtig verkabelt:

DatePickerDialog dpd = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

    }
 }, 2015, 5, 22);

 dpd.show();

248
2018-03-12 15:56



Probieren Sie es aus.

Der Code

new DatePickerDialog(MainActivity.this, R.style.DialogTheme, new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        //DO SOMETHING
    }
}, 2015, 02, 26).show();

Der Style In Ihrer Datei styles.xml

BEARBEITEN - Das Thema wurde wie vorgeschlagen in "Theme.AppCompat.Light.Dialog" geändert

<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@color/blue_500</item>
</style>

47
2018-02-26 09:18



Nur um zu erwähnen, können Sie auch das Standard-Thema wie verwenden android.R.style.Theme_DeviceDefault_Light_Dialog stattdessen.

new DatePickerDialog(MainActivity.this, android.R.style.Theme_DeviceDefault_Light_Dialog, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    //DO SOMETHING
    }
}, 2015, 02, 26).show();

3
2018-01-28 17:51



Sie haben kein Design-Thema, schreiben Sie es einfach in Ihr Dialog-Erstellungsobjekt

DatePickerDialog datePicker = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_LIGHT,this, mYear, mMonth, mDay);

folgen Sie diesem, es gibt Ihnen alle Art Datum Picker Stil es ist wirklich Arbeit

http://www.android-examples.com/change-datepickerdialog-theme-in-android-using-dialogfragment/


1
2017-07-29 07:28



versuche das, arbeite für mich

Setzen Sie die zwei Optionen, colorAccent und android:colorAccent

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
   ....
    <item name="android:dialogTheme">@style/AppTheme.DialogTheme</item>
    <item name="android:datePickerDialogTheme">@style/Dialog.Theme</item>
</style>

<style name="AppTheme.DialogTheme" parent="Theme.AppCompat.Light.Dialog">

<!-- Put the two options, colorAccent and android:colorAccent. -->
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:colorPrimary">@color/colorPrimary</item>
    <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="android:colorAccent">@color/colorPrimary</item>
 </style>

1
2018-03-20 19:46



Ich hatte das Problem, dass Zeitauswahltasten auf dem Bildschirm für API 24 in Android nicht gesehen wurden. (API 21+) es ist gelöst durch

<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog">
            <item name="android:colorAccent">@color/colorPrimary2</item></style>

<style name="Theme" parent="BBaseTheme">
         <item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>

0
2018-05-23 17:04



<style name="AppThemeDatePicker" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorAccent">@color/select2</item>
    <item name="android:colorAccent">@color/select2</item>
    <item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
</style>


<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
    <item name="android:headerBackground">@color/select2</item>
</style>

0
2017-08-24 05:38



Für die Farbe des Listeneintrags für das Jahr ändern (SPEZIFISCH FÜR ANDROID 5.0)

Stellen Sie einfach eine bestimmte Textfarbe in Ihrem Datumsauswahldialog ein. Aus irgendeinem Grund setzt man Flagge yearListItemTextAppearance spiegelt keine Änderung der Jahresliste wider.

<item name="android:textColor">@android:color/black</item>

0
2018-06-25 07:56