これは私のスナックバーコードです:
Snackbar.make(viewHolder.productView, "Some Text Here ..", Snackbar.LENGTH_SHORT)
.setAction("I want be a icon here instead TEXT", new View.OnClickListener() {
@Override
public void onClick(View v) {
// Perform anything for the action selected
}
})
.show();
とにかく.setAction
にテキストの代わりにアイコンを追加することはありますか?
私は GoogleがSnackbarのアイコンを使用しないことを提案 を知っていますが、それを使用したいと思います。
ImageSpanは長いテキスト(複数行)で正しく表示されない場合があります。代わりに、左側の複合ドローアブルを使用してください(Android:drawableLeft
と同じ)。
Snackbar snackbar = Snackbar.make(layout, R.string.test, Snackbar.LENGTH_LONG);
View snackbarLayout = snackbar.getView();
TextView textView = (TextView)snackbarLayout.findViewById(Android.support.design.R.id.snackbar_text);
textView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.white_checkbox, 0, 0, 0);
textView.setCompoundDrawablePadding(getResources().getDimensionPixelOffset(R.dimen.snackbar_icon_padding));
snackbar.show();
AndroidX Materialライブラリを使用している場合は、Android.support.design.R.id.snackbar_text
をcom.google.Android.material.R.id.snackbar_text
に置き換えます。
ImageSpanをご存知ですか?それはあなたがあなたの目標を達成するのを助けるかもしれません!以下のコードを参照してください:
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append("My message ").append(" ");
builder.setSpan(new ImageSpan(MainActivity.this, R.drawable.ic_launcher), builder.length() - 1, builder.length(), 0);
builder.append(" next message");
Snackbar.make(parent view, builder, Snackbar.LENGTH_LONG).show();]
大きなアイコンは重力を維持しないため使用しないでください。
Ref: AndroidのTextViewで画像を表示する方法
お役に立てば幸いです。
Snackbar
を変更できるのはこれだけです。
Snackbar snackbar = Snackbar
.make(parentLayout, R.string.snackbar_text, Snackbar.LENGTH_LONG)
.setAction(R.string.snackbar_action, myOnClickListener);
snackbar.setActionTextColor(Color.CYAN);
View snackbarView = snackbar.getView();
snackbarView.setBackgroundColor(Color.YELLOW);//change Snackbar's background color;
TextView textView = (TextView)snackbarView .findViewById(Android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.BLUE);//change Snackbar's text color;
snackbar.show(); // Don’t forget to show!
残念ながら、Snackbar
とは異なり、Toast
の内容をカスタマイズすることはできません。将来は?知りません。
スナックバーの左側にアイコンを追加するとします。次のコードは、これを実現するのに役立ちます。
SpannableStringBuilder builderTextLeft = new SpannableStringBuilder();
builderTextLeft.append(" ");
builderTextLeft.setSpan(new ImageSpan(context, R.drawable.ic_vector), 0, 1, 0);
Snackbar snackbar = Snackbar.make(parentLayout, builderTextLeft, Snackbar.LENGTH_LONG);
snackbar.show();
上記のコードでは、スナックバーの左側に情報アイコンを追加しています。
スナックバーの右側にアイコンを追加する場合は、次のことを行う必要があります。
SpannableStringBuilder buildetTextRight = new SpannableStringBuilder();
buildetTextRight.append(" ");
buildetTextRight.setSpan(new ImageSpan(context, R.drawable.ic_close),
buildetTextRight.length()-1, buildetTextRight.length(), 0);
上記のコードでは、スナックバーの右側に閉じるアイコンを追加しています。
SnackbarContentLayoutにビューを追加することもできます
Kotlinコード:
val snackbar = Snackbar.make(....
val textView = snackbar.view.findViewById(R.id.snackbar_action) as TextView
textView.isAllCaps = false
val imgClose = ImageView(context)
imgClose.scaleType = ImageView.ScaleType.CENTER_INSIDE
val layImageParams = ViewGroup.LayoutParams(WRAP_CONTENT, MATCH_PARENT)
imgClose.setImageResource(R.drawable.ic_close)
(textView.parent as SnackbarContentLayout).addView(imgClose, layImageParams)
imgClose.setOnClickListener { snackbar.dismiss() }
snackbar.show()