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

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

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

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

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

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

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

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

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

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 января 2019

На самом деле проблема связана с самим 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>
0 голосов
/ 11 января 2019

Если вы ответите на вопрос ЭТОГО , вы можете сделать что-то вроде следующего кода для кнопки действия (на самом деле 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()
...