39

我正在显示一个带有相当长短信的小吃店,并且在手机上以纵向模式显示它看起来不错。

手机人像模式

但在平板电脑上,它似乎只允许 1 行文本,所以它被省略了

平板电脑横向模式

无论如何我可以让它在平板电脑领域成为 2 行吗?

4

4 回答 4

42

重要且未在其他答案中说明的是您需要使用Snackbar 的 view

所以:

Snackbar snackbar = Snackbar.make(rootView, R.string.message, Snackbar.LENGTH_LONG);
View snackbarView = snackbar.getView();
TextView snackTextView = (TextView) snackbarView.findViewById(com.google.android.material.R.id.snackbar_text);

snackTextView.setMaxLines(2);
snackbar.show();

注意:这也可能对屏幕密度较低的设备有所帮助。

PS 如果您没有使用 AndroidX(推荐),并且仍在使用旧版支持库,请使用android.support.design.R.id.snackbar_text而不是com.google.android.material.R.id.snackbar_text获取 Snackbar 的内部 TextView。

于 2017-07-18T10:17:06.250 回答
26

您可以像这样引用 SnackBar 的 TextView:

TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text);

然后通过更改其最大行数对 TextView 本身进行操作:

tv.setMaxLines(3)
于 2015-08-26T13:50:01.153 回答
21

根据Snackbar 源代码,您可以看到在宽度大于或等于 600 dp 的设备上,它们将最大行数更改为1. 所以你也可以添加:

<integer name="design_snackbar_text_max_lines">3</integer>

融入你的res\values\*.xml价值观

于 2019-02-06T10:33:29.690 回答
4

一个更详细和更全面的上下文示例是:

// Create on click listener
final  OnClickListener positiveButtonClickListener = new OnClickListener()
{
  @Override
  public void onClick(View v)
  {
    // Do your action - e.g. call GooglePlay  to update app
    openGooglePlayAppUpdate();
  }
};

// Create snack bar instance
Snackbar sBar = Snackbar.make(findViewById(R.id.some_view_to_bind),  // You bind here e.g. layout, or form view
                              R.string.snack_bar_message,
                              Snackbar.LENGTH_INDEFINITE)
                        // Set text and action to the snack bar
                        .setAction(android.R.string.ok, positiveButtonClickListener);

// Now get text view of your snack bar ...
TextView snckBarTv = (TextView) offerUpdate.getView().findViewById(android.support.design.R.id.snackbar_text);
snckBarTv.setMaxLines(5); // ... and set max lines
sBar.show(); // and finally display snack bar !
于 2017-01-30T12:04:06.673 回答