Как предотвратить усечение текста моей закуски на Android?

Я показываю закусочную с довольно длинным текстовым сообщением, а по телефону в портретном режиме это выглядит нормально.

Режим портретной ориентации

Но на планшете кажется, что он разрешает только одну строку текста, поэтому он получает многоточие

Режим ландшафтного планшета

В любом случае, я могу заставить его быть 2 строками в планшете?

Ответы

Ответ 1

Вы можете ссылаться на TextView SnackBar следующим образом:

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

И затем работайте с самим TextView, изменив его максимальные строки:

tv.setMaxLines(3)

Ответ 2

Что важно и что не указано в других ответах, так это то, что вам нужно использовать 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();

Примечание. Это также может помочь с устройствами с более низкой плотностью экрана.

P.S. Если вы не используете AndroidX (что рекомендуется) и по-прежнему используете устаревшие библиотеки поддержки, используйте android.support.design.R.id.snackbar_text вместо com.google.android.material.R.id.snackbar_text для получения внутреннего TextView Snackbar.

Ответ 3

Более подробный и подробный пример с контекстом будет следующим:

// 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 !

Ответ 4

Основываясь на исходном коде Snackbar, вы можете видеть, что на устройствах с шириной более или равной 600 dp они изменяют максимальное количество строк на 1. Так что вы также можете просто добавить:

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

в ваши res\values\*.xml