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>
オリジナルから:
このようなものに:
ニールの提案がフルスクリーン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>
スタイルdatePickerStyle
でMyDatePickerStyle
をオーバーライドしました。親の選択は、アプリの基本テーマ(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();
これを試してみてください。
コード
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>
これを試して、私のために働く
colorAccent
とAndroid: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);
結果:
言及するだけでなく、代わりに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();
ダイアログ作成オブジェクトにテーマを作成するだけで、テーマを作成する必要はありません。
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/
<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>
年のリストアイテムのテキストの色を変更する場合(Android 5.0に固有)
日付選択ダイアログのスタイルで特定のテキストの色を設定するだけです。何らかの理由で、フラグyearListItemTextAppearance
を設定しても、年リストの変更は反映されません。
<item name="Android:textColor">@Android:color/black</item>
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>