如果文本较长,如何使快餐栏操作按钮显示在另一行?

时间:2019-01-11 09:38:54

标签: android android-snackbar snackbar material-components material-components-android

我正在使用28.0.0版支持库中的Material Design组件。

我想显示一个快餐栏,当操作按钮内的文本太长时,它会显示在与快餐栏消息不同的行中。

在遵循这些组件的材料设计文档之后,似乎可以使用如下所示的默认小吃栏:

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 :(得分:1)

如果您回答了THIS问题,则可以为操作按钮(实际上是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()

答案 1 :(得分:1)

问题实际上是android本身的问题,从默认android dimen文件加载的属性已损坏,因此用于计算快餐栏元素方向的必需属性从未设置为正确的值。该问题已得到通知,解决方案将很快推送到源代码。

解决方法:直接在主主题中设置属性maxActionInlineWidth,然后您可以从@ dimen / 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>