如何将粗体文本设置为 Android Snackbar 操作文本?

Posted

技术标签:

【中文标题】如何将粗体文本设置为 Android Snackbar 操作文本?【英文标题】:How to set Bold text to Android Snackbar Action Text? 【发布时间】:2015-11-20 10:29:56 【问题描述】:

我们可以使用setActionTextColor 为Snackbar 的操作文本设置颜色,如https://developer.android.com/reference/android/support/design/widget/Snackbar.html 中所述。但是,有没有办法使文本加粗?

谢谢!!

【问题讨论】:

您是否尝试将测试设置为<b>text</b> 谢谢@iturki。试过但不工作:( 【参考方案1】:

使用snackbar_action资源ID。

事实证明,您可以使用与设置 Snackbar 消息文本样式相同的方法来设置 Snackbar 的 Action 文本样式。

您只需使用资源 ID snackbar_action 而不是 snackbar_text

下面是为消息文本和操作文本设置样式的示例。

Snackbar snackbar = Snackbar.make( ... ); // Create the Snackbar however you like.

TextView snackbarActionTextView = (TextView) snackbar.getView().findViewById( android.support.design.R.id.snackbar_action );
snackbarActionTextView.setTextSize( 20 );
snackbarActionTextView.setTypeface( snackbarActionTextView.getTypeface(), Typeface.BOLD );

TextView snackbarTextView = (TextView) snackbar.getView().findViewById( android.support.design.R.id.snackbar_text );
snackbarTextView.setTextSize( 16 );
snackbarTextView.setMaxLines( 3 );

在我的示例中,我将操作文本设置为具有 20 的 TextSize 和粗体 Typeface,并将消息文本设置为具有 16 的 TextSize 并允许最多 3 行。

【讨论】:

【参考方案2】:

BOLD 文本添加到 Snackbar 文本的最简单方法是使用 Android Html class 生成要传递给 Snackbar.make() 函数的文本。这是一个例子:

Snackbar.make(view, Html.fromHtml("Add <b>bold</b> to Snackbar text"), Snackbar.LENGTH_LONG).show();

另一种方法是使用SpannableStringBuilder 类。

SpannableStringBuilder snackbarText = new SpannableStringBuilder();
snackbarText.append("Add ");
int boldStart = snackbarText.length();
snackbarText.append("bold");
snackbarText.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), boldStart, snackbarText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
snackbarText.append(" to Snackbar text");
Snackbar.make(view, snackbarText, Snackbar.LENGTH_LONG).show();

【讨论】:

感谢 BrentM。这适用于正文,但不适用于 ACTION 文本:(。我正在寻找通过 snackbar.setAction(snackbarActionText, ...); 设置的粗体文本【参考方案3】:

使用Material Components 的1.1.0 版本,您可以在应用主题中定义属性snackbarButtonStyle

<style name="AppTheme" parent="Theme.MaterialComponents.*">
  <item name="snackbarButtonStyle">@style/snackbar_button</item>
</style>

通过这种方式,您可以为用于操作的按钮定义自定义样式。 您可以更改文本颜色、背景颜色,还可以为 textAppearance 定义自定义样式。 比如:

  <style name="snackbar_button" parent="@style/Widget.MaterialComponents.Button.TextButton.Snackbar">
      <item name="android:textAppearance">@style/snackbar_button_textappearance</item>
  </style>

  <style name="snackbar_button_textappearance"  parent="@style/TextAppearance.MaterialComponents.Button">
    <item name="android:textStyle">bold</item>
  </style>

【讨论】:

【参考方案4】:

在snackbar 中加粗文本的最佳方法是在此处提供一种解决方案,但我会使其更简单:

Snackbar snackbar = Snackbar
                    .make(yourViewHere, Html.fromHtml("<b>Email Copied To Clipboard</b>"), Snackbar.LENGTH_LONG);

 snackbar.show();

【讨论】:

show() 无效,无法分配给小吃店。

以上是关于如何将粗体文本设置为 Android Snackbar 操作文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何将粗体和斜体应用于NSMutableAttributedString范围?

iOS Swift中的UIButton [重复]

如何在运行时将文本框的文本设置为粗体?

如何将 HTML5 画布文本设置为粗体和/或斜体?

将 UILabel 文本设置为粗体 [重复]

如何在 Android TextView 中将字体样式设置为粗体、斜体和下划线?