20

我通过以下代码构建 Snackbar:

Snackbar sb = Snackbar.make(drawer,  "message", Snackbar.LENGTH_LONG)
       .setAction("action", new View.OnClickListener() {
       @Override
       public void onClick(View view) {

       }
});

现在我想更改消息和操作按钮的字体但找不到任何解决方案,该怎么做?

4

9 回答 9

42

您可以通过从 Snack bar 获取视图来设置 TypeFace

TextView tv = (TextView) (mSnackBar.getView()).findViewById(android.support.design.R.id.snackbar_text);
Typeface font = Typeface.createFromAsset(getContext().getAssets(), "fonts/font_file.ttf");
tv.setTypeface(font);

对于 AndroidX,使用资源 IDcom.google.android.material.R.id.snackbar_text

于 2015-11-04T08:56:46.567 回答
15

设置 Snackbar 文本和动作的样式

您可以使用相同的方法来设置snackbar_text和的样式snackbar_action

创建快餐栏后,您可以使用以下内容获取与文本和操作关联的视图,然后对视图应用任何调整。

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

在我的示例中,我将 Action 的字体大小设置为 20 和 Bold,将 Text 的大小设置为 16,最多允许 3 行。

于 2016-04-22T17:34:09.757 回答
13

安卓X

android.support.design.R.id.snackbar_text将不可用。

改为使用 com.google.android.material.R.id.snackbar_text

如果您使用的是 kotlin,那么我更喜欢您使用扩展功能:

fun Snackbar.changeFont()
{
    val tv = view.findViewById(com.google.android.material.R.id.snackbar_text) as TextView
    val font = Typeface.createFromAsset(context.assets, "your_font.ttf")
    tv.typeface = font
}

并称之为:

mSnakeBar.changeFont()
于 2019-09-24T17:15:54.333 回答
5

除了这个答案:now package to findsnackbar's textview by id is

val snackText = snackView.findViewById<TextView>(
                    com.google.android.material.R.id.snackbar_text)
于 2019-05-22T06:31:15.983 回答
4

获取小吃店视图并应用自定义

TextView tv = (TextView) sb.getView().findViewById(android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.WHITE);
tv.setTypeface(Typeface.createFromAsset(
                    getAssets(),
                    "fonts/ur_file.ttf"));

或这个

SpannableStringBuilder snackbarText = new SpannableStringBuilder();
snackbarText.append("Add ");
int boldStart = snackbarText.length();
snackbarText.append("bold color");
snackbarText.setSpan(new ForegroundColorSpan(0xFFFF0000), boldStart, snackbarText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
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();

或者你可以看看thisthis

谢谢你。

于 2015-11-04T08:50:27.620 回答
1

支持库 26开始,字体可以用作资源

val mainTextView = view.findViewById(com.google.android.material.R.id.snackbar_text) as TextView
val font = ResourcesCompat.getFont(applicationContext, R.font.your_font)
mainTextView.typeface = font
于 2019-11-21T09:58:57.380 回答
0

如果要更改 Action Button 和 textview 的字体,请使用以下代码:

Snackbar.make(this,message,Snackbar.LENGTH_LONG).also {snackbar ->
  snackbar.setAction("ok"){
     snackbar.dismiss()
  }
  val actionButton = snackbar.view.findViewById(com.google.android.material.R.id.snackbar_action) as Button
  val textview = snackbar.view.findViewById(com.google.android.material.R.id.snackbar_text) as TextView
  val font = Typeface.createFromAsset(context.assets, "fonts/your_custom_font")
  actionButton.typeface = font
  textview.typeface = font
  ViewCompat.setLayoutDirection(snackbar.view,ViewCompat.LAYOUT_DIRECTION_RTL)

}。节目()

于 2020-04-07T14:06:30.040 回答
0

对于调用createFromAsset()时崩溃的每一个,您都可以使用

Font font = ResourcesCompat.getFont(getApplicationContext(), R.font.your_font);
于 2021-06-18T21:58:46.487 回答
0

获取资产

AssetManager assets = context.getAssets();

获取字体

Typeface typeface = Typeface.createFromAsset(assets,PATH OF .TTF FILE);

路径:font/robotoregular.ttf(如果 .ttf 文件存储在 assets/font 路径中)

于 2015-11-04T08:49:57.593 回答