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

8

你尝试将测试设置为 <b>text</b> 了吗? - iTurki
谢谢@iturki。尝试过了,但是没有起作用 :( - Elye
5个回答

16

使用snackbar_action资源ID。

你可以使用相同的方法来为Snackbar的动作文本设置样式,就像你用来为Snackbar的消息文本设置样式的方法一样。

你只需要使用资源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行。

对于那些正在寻找 AndroidX 替代方案的人,可以使用 findViewById(com.google.android.material.R.id.snackbar_action) - Divya Gupta

1
添加加粗文本到 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();

2
谢谢BrentM。这适用于主文本,但不适用于ACTION文本:(。我正在寻找如何使加粗文本通过snackbar.setAction(snackbarActionText, ...);设置。 - Elye

1
使用版本1.1.0Material Components,你可以在应用程序主题中定义属性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>

enter image description here


0

2022年目前最新的方法是使用HtmlCompat.fromHtml而不是Html.fromHtml:

在Java中:

    Snackbar snackbar = Snackbar.make(view, 
                                      Html.fromHtml("<b>Your text here</b>"), 
                                      Snackbar.LENGTH_LONG);
    snackbar.show();

在 Kotlin 中:
    val snackbar = Snackbar.make(requireView(),
           HtmlCompat.fromHtml("<b>Your text here</b>", HtmlCompat.FROM_HTML_MODE_LEGACY), 
           Snackbar.LENGTH_SHORT)

    snackbar.show()

0

在 snackbar 中加粗文本的最佳方法已经在这里的一个解决方案中给出,但我将使它更简单:

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

 snackbar.show();

show() 是 void,无法分配给 snackbar。 - Vadik Sirekanyan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接