Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 材质日期选择器自定义样式_Android_Material Design_Android Datepicker_Material Components_Material Components Android - Fatal编程技术网

Android 材质日期选择器自定义样式

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

我在这个库中使用了来自google material的范围日期选择器

实现'com.google.android.material:material:1.2.0-alpha02'

这是我的密码

     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
    function
    setTitleText()
  • 使对话框不全屏-您不能为日期范围选择器更改它,文档中说默认情况下它是全屏的
  • 移动日期范围选择器允许选择日期范围。他们 覆盖整个屏幕

    这是文件

    以下是我如何调整一些颜色以匹配我的主题:

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