如果文本很长,如何使小吃栏操作按钮显示在不同的行中?

Posted

技术标签:

【中文标题】如果文本很长,如何使小吃栏操作按钮显示在不同的行中?【英文标题】:How to make that the snackbar action button be shown in a different line if the text is long? 【发布时间】:2019-06-06 05:11:30 【问题描述】:

我正在使用支持库版本 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。

所以我不知道我在小吃栏中缺少什么才能使其正常工作。

谢谢!

【问题讨论】:

【参考方案1】:

如果您通过THIS 问题的答案,您可以为操作按钮(实际上是文本视图)执行以下代码:

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

【讨论】:

感谢您的回答,但操作按钮它是一个按钮。小吃店的实现有这个。 。此外,maxLine 是允许文本内有更多行,我想要的是小吃栏的样式可以改变,因为它在 material.io 指南中 如果你知道你想从哪里换行,那么你可以在字符串中添加**\n**btn.text= "ThisIsA\nVeryLongText"。这更像是一种解决方法。【参考方案2】:

问题实际上是android本身的问题,从默认的android dimen文件加载的属性被破坏了,因此用于计算snackbar元素方向的所需属性永远不会设置为正确的值。问题已告知,解决方案会尽快推送到源码中。

解决方法:直接在主主题中设置属性 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>

【讨论】:

它确实有效,也适用于 com.google.android.material.snackbar.Snackbar

以上是关于如果文本很长,如何使小吃栏操作按钮显示在不同的行中?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置小吃栏和浮动操作按钮之间的距离?

在启用触摸模式的情况下显示小吃店时,无法将注意力集中在小吃店中的操作按钮上

平板电脑; TableView 在不同的行中充满了任意数量的文本字段和按钮。按下按钮时所有文本字段上的resignFirstResponder?

根据文本长度调整快餐栏消息的大小[重复]

如何使 UIAlertView 上的按钮多行显示?

如何在一个共同的起点在不同的行中对齐我的文本