web-dev-qa-db-ja.com

Android 5.0のDatepickerダイアログの色を変更

Android 5.0の日付ピッカー(およびタイムピッカー)の配色を変更することはできますか?

私はアクセントの色を設定しようとしましたが、これは機能しません(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>

オリジナルから: enter image description here

このようなものに: enter image description here

97
Warpzit

ニールの提案がフルスクリーンDatePickerをもたらす理由は、親テーマの選択です:

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

さらに、このルートを使用する場合は、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();

私の意見では、これは良くありません。スタイルをJavaから外し、styles.xml/themes.xml内に保持するようにしてください。

ニールの提案に少し変更を加えると(親テーマを変更してTheme.Material.Light.Dialogに変更する)、希望する結果が得られることに同意します。しかし、これは別の方法です。

最初の検査で、datePickerStyle(変更しようとしているもの)、headerBackground、および他のいくつかのテキストの色とテキストスタイルなどを定義するdayOfWeekBackgroundに出会います。

アプリのテーマでこの属性をオーバーライドしても機能しません。 DatePickerDialogは、属性datePickerDialogThemeによって割り当て可能な別個のテーマを使用します。したがって、変更を有効にするには、オーバーライドされたdatePickerStyle内のdatePickerDialogThemeをオーバーライドする必要があります。

さあ:

アプリのベーステーマ内でdatePickerDialogThemeをオーバーライドします。

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

MyDatePickerDialogThemeを定義します。親テーマの選択は、アプリのベーステーマによって異なります。Theme.Material.DialogまたはTheme.Material.Light.Dialogのいずれかになります。

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

スタイルdatePickerStyleMyDatePickerStyleをオーバーライドしました。親の選択は、アプリの基本テーマ(Widget.Material.DatePickerまたはWidget.Material.Light.DatePicker)によって決まります。要件に従って定義します。

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

現在、デフォルトで?attr/colorAccentに設定されているheaderBackgroundのみをオーバーライドしています(これが、ニールの提案が背景の変更で機能する理由でもあります)。しかし、かなり多くのカスタマイズが可能です。

dayOfWeekBackground
dayOfWeekTextAppearance
headerMonthTextAppearance
headerDayOfMonthTextAppearance
headerYearTextAppearance
headerSelectedTextColor
yearListItemTextAppearance
yearListSelectorColor
calendarTextColor
calendarSelectedTextColor

これほどの制御(カスタマイズ)が必要ない場合は、datePickerStyleをオーバーライドする必要はありません。 colorAccentは、ほとんどのDatePicker's色を制御します。したがって、colorAccent内のMyDatePickerDialogThemeだけをオーバーライドすることで動作します。

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

colorAccentをオーバーライドすると、OKおよびCANCELのテキストの色も変更できるという利点が得られます。悪くない。

この方法では、スタイリング情報をDatePickerDialog'sコンストラクターに提供する必要はありません。すべてが正しく配線されています。

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();
286
Vikram

これを試してみてください。

コード

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();

The Style styles.xmlファイル内

編集-提案どおりテーマをTheme.AppCompat.Light.Dialogに変更

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

これを試して、私のために働く

colorAccentAndroid:colorAccentの2つのオプションを追加します

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

新しいスタイルを作成する

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

Javaコード:

ここでは、親テーマが重要です。色を選択してください

DatePickerDialog = new DatePickerDialog(context,R.style.DialogTheme,this,now.get(Calendar.YEAR),now.get(Calendar.MONTH),now.get(Calendar.DAY_OF_MONTH);

結果:

enter image description here

4

言及するだけでなく、代わりにAndroid.R.style.Theme_DeviceDefault_Light_Dialogのようなデフォルトテーマを使用することもできます。

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
user1214120

ダイアログ作成オブジェクトにテーマを作成するだけで、テーマを作成する必要はありません。

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

これに従うと、すべてのタイプの日付選択スタイルが提供され、本当に機能します

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

1
<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>
1
Keshav Gera

年のリストアイテムのテキストの色を変更する場合(Android 5.0に固有)

日付選択ダイアログのスタイルで特定のテキストの色を設定するだけです。何らかの理由で、フラグyearListItemTextAppearanceを設定しても、年リストの変更は反映されません。

<item name="Android:textColor">@Android:color/black</item>
0
user3354265

AndroidのAPI 24の画面にタイムピッカーボタンが表示されないという問題がありました。 (API 21+)によって解決されます

<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
Samet öztoprak