Android 材质日期选择器自定义样式
我在这个库中使用了来自google material的范围日期选择器 实现'com.google.android.material:material:1.2.0-alpha02' 这是我的密码Android 材质日期选择器自定义样式,android,material-design,android-datepicker,material-components,material-components-android,Android,Material Design,Android Datepicker,Material Components,Material Components Android,我在这个库中使用了来自google material的范围日期选择器 实现'com.google.android.material:material:1.2.0-alpha02' 这是我的密码 MaterialDatePicker.Builder<Pair<Long, Long>> builder = MaterialDatePicker.Builder.dateRangePicker(); CalendarConstraint
MaterialDatePicker.Builder<Pair<Long, Long>> builder =
MaterialDatePicker.Builder.dateRangePicker();
CalendarConstraints.Builder constraintsBuilder = new CalendarConstraints.Builder();
builder.setCalendarConstraints(constraintsBuilder.build());
MaterialDatePicker<Pair<Long,Long>> picker = builder.build();
assert getFragmentManager() != null;
picker.show(getFragmentManager(), picker.toString());
MaterialDatePicker.Builder=
MaterialDatePicker.Builder.dateRangePicker();
CalendarConstraints.Builder constraintsBuilder=新的CalendarConstraints.Builder();
setCalendarConstraints(constraintsBuilder.build());
MaterialDatePicker-picker=builder.build();
断言getFragmentManager()!=无效的
show(getFragmentManager(),picker.toString());
我想自定义对话框选择器更改文本字段,使对话框不全屏等。。
我怎样才能进行所有这些修改
基本上,你应该使用样式。在应用主题中,添加一个项目
materialCalendarTheme
,该项目具有继承父级ThemeOverlay.MaterialComponents.MaterialCalendar
的自定义样式,并更改样式
MaterialDatePicker.Builder
functionsetTitleText()
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
<item name="materialCalendarTheme">@style/ThemeMaterialCalendar</item>
</style>
<style name="ThemeMaterialCalendar" parent="ThemeOverlay.MaterialComponents.MaterialCalendar">
<item name="buttonBarPositiveButtonStyle">@style/ThemeMaterialCalendarButton</item>
<item name="buttonBarNegativeButtonStyle">@style/ThemeMaterialCalendarButton</item>
<item name="materialButtonStyle">@style/ThemeMaterialCalendarTextButton</item>
</style>
<style name="ThemeMaterialCalendarButton" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
<item name="android:textColor">?themeTextColorPrimary</item>
</style>
<style name="ThemeMaterialCalendarTextButton" parent="Widget.MaterialComponents.Button.TextButton.Dialog.Flush">
<item name="android:textColor">?themeTextColorPrimary</item>
<item name="iconTint">?themeTextColorPrimary</item>
</style>
@样式/主题材料日历
@样式/主题材质日历按钮
@样式/主题材质日历按钮
@样式/主题材质CalendarTextButton
?themeTextColorPrimary
?themeTextColorPrimary
?themeTextColorPrimary
关于全屏
范围选择器应覆盖整个屏幕(默认值=单个日期的对话框,范围的全屏)。
但是,您可以在样式中更改此行为
您可以使用设置主题
方法应用主题覆盖:
//To apply a dialog
builder.setTheme(R.style.ThemeOverlay_MaterialComponents_MaterialCalendar);
//To apply the fullscreen:
builder.setTheme(R.style.ThemeOverlay_MaterialComponents_MaterialCalendar_Fullscreen);
注意:它至少需要1.2.0-alpha01
版本
作为备选方案您可以在应用程序主题中添加materialCalendarFullscreenTheme
属性
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
<item name="materialCalendarFullscreenTheme">@style/CustomThemeOverlay_MaterialCalendar_Fullscreen</item>
</style>
关于字符串
目前没有更改字符串的方法。
唯一现有的方法是
builder.setTitleText
来更改标题
但是,您可以覆盖项目中的所有现有字符串,但是此解决方案可以停止,以便在下一版本中运行。
例如:
<string name="mtrl_picker_save" description="Confirms the selection [CHAR_LIMIT=12]">....</string>
<string name="mtrl_picker_text_input_date_range_start_hint" description="Label for the start date in a range selected by the user [CHAR_LIMIT=60]">...</string>
<string name="mtrl_picker_text_input_date_range_end_hint" description="Label for the end date in a range selected by the user [CHAR_LIMIT=60]">...</string>
。。。。
...
...
在这里,您可以在
1.2.0-alpha02
中找到材料日历使用的方法,虽然发布的答案完全有效,但似乎没有必要全局设置materialCalendarTheme
——您只需通过MaterialDatePicker.Builder
和设置主题(intthemeresid)
方法将其设置为。下面是一个例子,他们是如何做到这一点的
resolveOrThrow辅助方法:
fun Context.resolveOrNull(@AttrRes attributeResId: Int): Int? {
val typedValue = TypedValue()
if (theme.resolveAttribute(attributeResId, typedValue, true)) {
return typedValue.data
}
return null
}
这样,日期选择器对话框将不是全屏,而是常规对话框。在全屏和对话框版本之间切换非常简单: 全屏:
val picker = MaterialDatePicker.Builder.dateRangePicker().setTheme(R.style.ThemeOverlay_MaterialComponents_MaterialCalendar_Fullscreen).build()
val picker = MaterialDatePicker.Builder.dateRangePicker().setTheme(R.style.ThemeOverlay_MaterialComponents_MaterialCalendar).build()
对话框:
val picker = MaterialDatePicker.Builder.dateRangePicker().setTheme(R.style.ThemeOverlay_MaterialComponents_MaterialCalendar_Fullscreen).build()
val picker = MaterialDatePicker.Builder.dateRangePicker().setTheme(R.style.ThemeOverlay_MaterialComponents_MaterialCalendar).build()
“更改文本字段”是什么意思?@GabrieleMariotti更改保存文本、开始日期和结束日期文本为您的响应考虑得太多了,禁用全屏显示效果很好,但是关于在我的代码中重写字符串,我该怎么做?@zakaria只需在你的strings.xml中放入你想要重写的项,如上面的示例所示。是的,我修复了只需在你的字符串文件中复制粘贴字符串,并更改值,以获得你的帮助即可。我不得不将库从1.1.0升级到
'com.google.android.material:material:1.2.0-alpha06'
,这样R.style….
就不会被Lint突出显示为私有属性。我们可以为日期选择器片段应用我们自己的布局
文件吗?当我在中设置android:textColor
时,它使应用程序崩溃。
val picker = MaterialDatePicker.Builder.dateRangePicker().setTheme(R.style.ThemeOverlay_MaterialComponents_MaterialCalendar).build()