Как сделать так, чтобы кнопка действия закусочной отображалась в другой строке, если текст длинный?

Я работаю с компонентами Material Design в библиотеке поддержки версии 28.0.0.

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

Следуя проектной документации материалов этих компонентов, представляется возможным использовать снэк-панель по умолчанию, как показано здесь:

https://material.io/design/components/snackbars.html

Но используя этот код:

var snackbar:Snackbar = Snackbar.make(root, message, Snackbar.LENGTH_SHORT)
    snackbar.setAction(action, View.OnClickListener {  })
    snackbar.show()

Если текст действия длинный, он не перемещается на следующую строку.

Корневой макет является CoordinatorLayout.

Поэтому я не знаю, чего мне не хватает в закусочной, чтобы она заработала.

Спасибо!

2 ответа

Решение

Проблема на самом деле является проблемой самого Android, загрузка атрибута из файла измерений Android по умолчанию нарушена, поэтому для обязательного атрибута, который используется для вычисления ориентации элементов снэк-бара, никогда не устанавливается правильное значение. О проблеме сообщили, и решение скоро будет передано в исходный код.

Обходной путь: установите атрибут maxActionInlineWidth непосредственно в вашей главной теме, и вы можете выбрать значения из @dimension/design_snackbar_action_inline_max_width, которые должны использоваться android.

Пример:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="maxActionInlineWidth">@dimen/design_snackbar_action_inline_max_width</item>
</style>

Если вы ответите на ЭТОТ вопрос, вы можете сделать что-то вроде приведенного ниже кода для кнопки действия (на самом деле textview):

var snackbar:Snackbar = Snackbar.make(root, message, Snackbar.LENGTH_SHORT)
val snackbarView = snackbar.view
val tv = snackbarView.findViewById<TextView>(android.support.design.R.id.snackbar_action)
tv.maxLines = 2
snackbar.show()