DatePickerDialog имеет затемненные кнопки в androidx.fragment.app.DialogFragment - PullRequest
0 голосов
/ 25 мая 2018

Этот простой класс:

class DateSelectionDialogFragment : DialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val calendar = Calendar.getInstance()
        val year = calendar.get(Calendar.YEAR)
        val month = calendar.get(Calendar.MONTH)
        val dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH)
        return DatePickerDialog(requireContext(), this, year, month, dayOfMonth)
    }
}

приводит к странному поведению кнопок.Что важно, я не указал стиль для диалога.DialogFragment из пакета androidx.fragment.app.

Dialog

Ответы [ 5 ]

0 голосов
/ 05 марта 2019

Как подсказал Мой Янки.Решение с моей стороны заключалось в том, чтобы включить colorPrimary, чтобы текст в кнопках соответствовал теме.Увидеть ниже;colorAccent меняет подсветку и цвет селектора даты:

Мой стиль DatePicker был следующим:

<!-- Date Picker Style -->
<style name="MyDatePicker" parent="Theme.MaterialComponents.Light.Dialog">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="materialButtonStyle">@style/Widget.MaterialComponents.Button.TextButton.Dialog</item>

</style>
0 голосов
/ 18 декабря 2018

Я пытался понять это уже несколько недель;Я просто наткнулся на решение несколько дней назад, но я забыл, где.Вот что ты делаешь;в вашем файле styles.xml добавьте новый стиль:

<style name="DatePickerStyle" parent="Theme.MaterialComponents.Light.Dialog">
    <item name="colorAccent">@color/colorSecondary</item>
    <item name="materialButtonStyle">@style/Widget.MaterialComponents.Button.TextButton</item>
</style>

Где @color/colorSecondary - ваш вторичный цвет, который вы используете в AppTheme.Теперь в вашем AppTheme добавьте следующий пункт:

<style name="AppTheme" parent="Theme.MaterialComponents.NoActionBar">
   ...
   ...
   <item name="android:datePickerDialogTheme">@style/DatePickerStyle</item>
</style>

Это наконец-то решило это для меня.Надеюсь, это поможет!Я думаю, что это ошибка в новом Theme.MaterialComponents.NoActionBar.

0 голосов
/ 01 июня 2018

Диалог примет вам colorAccent свойство из colors.xml файла, поэтому проверьте это значение или вы можете указать или изменить свой стиль диалога, создав свой собственный стиль в style.xmlфайл

0 голосов
/ 01 июня 2018

Если вы не меняли какие-либо стили, я думаю, что это как-то связано с тем, как Kotlin получает контекст в этой строке:

return DatePickerDialog(requireContext(), this, year, month, dayOfMonth)

Для JavaВы бы назвали DatePickerDialog следующим образом:

return new DatePickerDialog(getActivity(), this, year, month, day); ссылка на документы для Android

Я не специалист по Kotlin, но я использовал конвертер Java в Kotlin здесь вернул Kotlin в виде этой строки:

return DatePickerDialog(getActivity(), this, year, month, day)

Обычный DatePickerDialog не отображает кнопки «ОК» и «Отмена» с цветом фона кнопки по умолчанию.Он отображает белый фон и устанавливает для текста кнопки этот цвет по умолчанию.

Я думаю, что ваш код каким-то образом извлекает контекст стилей кнопок из родительской активности или по умолчанию вашего приложения, что соответствует цвету фонакнопок основного стиля вместо обычной перезаписи даты на белый фон.

Мое лучшее предположение заключается в том, что вы используете новые requireContext() и requireActivity() методы здесь ;Однако почему вы используете контекст вместо деятельности?Попробуйте вместо этого requireActivity():

return DatePickerDialog(requireActivity(), this, year, month, dayOfMonth)

После использования этой строки и / или getActivity(), как показано выше, обновите.

0 голосов
/ 29 мая 2018

Проблема исходит от Theme.MaterialComponents.Light.NoActionBar.

Это довольно новый (и альфа) и он должен заменить Theme.Design.Light.NoActionBar, но, как мы видим, это еще недостаточно хорошо.

Ваше решение было бы просто использовать Theme.Design.Light.NoActionBar.

Но если вы действительно хотите использовать Theme.MaterialComponents.Light.NoActionBar ... Проблема вызвана этим параметром в теме:

<item name="viewInflaterClass">com.google.android.material.theme.MaterialComponentsViewInflater</item>

Выможет заменить его на другой *ViewInflater, и выбора не так много, но:

<item name="viewInflaterClass">androidx.appcompat.app.AppCompatViewInflater</item>

Это работает, но Я бы не стал слишком полагаться на него, как на использование Inflater из другого пакетаможет вызвать странные проблемы.

...