Neilの提案がフルスクリーンになる理由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
。したがって、変更を有効にするには、overrided 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>
現在、headerBackground
デフォルトで設定されているもののみをオーバーライドしています?attr/colorAccent
(これは、ニールの提案が背景の変更で機能する理由でもあります)。しかし、かなり多くのカスタマイズが可能です:
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();