1. ホーム
  2. android

[解決済み] snackBarのレイアウトをカスタマイズするには?

2022-10-23 02:54:16

質問

snackBarのレイアウトをカスタムViewに変更する方法はありますか?

現在、黒色で表示され、背景色を変更することができます。 しかし、新しいレイアウトを膨らませ、それをsnackBarの背景にする正しい方法がわかりません?

ありがとうございます...

どのように解決するのですか?

Snackbar では、カスタム レイアウトを設定することはできません。しかし、Primoz990が提案したように、SnackbarのViewを取得することができます。getView関数はSnackbar.SnackbarLayoutを返します。これは水平方向のLinearLayoutオブジェクトで、子オブジェクトはTextViewとButtonです。Snackbarに独自のViewを追加するには、TextViewを非表示にして、Snackbar.SnackbarLayoutにViewを追加すればよいのです。

// Create the Snackbar
Snackbar snackbar = Snackbar.make(containerLayout, "", Snackbar.LENGTH_LONG);
// Get the Snackbar's layout view
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();
// Hide the text
TextView textView = (TextView) layout.findViewById(android.support.design.R.id.snackbar_text);
textView.setVisibility(View.INVISIBLE);

// Inflate our custom view
View snackView = mInflater.inflate(R.layout.my_snackbar, null);
// Configure the view
ImageView imageView = (ImageView) snackView.findViewById(R.id.image);
imageView.setImageBitmap(image);
TextView textViewTop = (TextView) snackView.findViewById(R.id.text);
textViewTop.setText(text);
textViewTop.setTextColor(Color.WHITE);

//If the view is not covering the whole snackbar layout, add this line
layout.setPadding(0,0,0,0);

// Add the view to the Snackbar's layout
layout.addView(snackView, 0);
// Show the Snackbar
snackbar.show();