web-dev-qa-db-ja.com

スナックバーのテキストがAndroidで切り捨てられないようにするにはどうすればよいですか?

私はかなり長いテキストメッセージでスナックバーを表示しています、そしてポートレートモードの電話ではそれはうまく見えます。

Phone Portrait mode

しかし、タブレットでは1行のテキストしか許可されていないようであるため、省略記号が使用されます

Tablet Landscape mode

とにかく、タブレットランドスケープで2行にすることはできますか?

25
arinte

SnackBarのTextViewは次のように参照できます。

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

次に、最大行数を変更して、TextView自体を操作します。

tv.setMaxLines(3)
25

重要で他の回答に記載されていないのは、スナックバーのビューを使用する必要があるということです。

そう:

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を取得するため。

21
Szymon Chaber

コンテキストを使用したより精巧で徹底的な例は次のとおりです。

// 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 !
3
Sold Out