Voici mon code Snackbar:
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();
Est-il possible d'ajouter une icône au lieu du texte dans .setAction
?
Je sais Google a suggéré de ne pas utiliser l'icône dans Snackbar , mais je veux l'utiliser.
ImageSpan peut ne pas sembler correct avec un texte plus long (plusieurs lignes). Utilisez plutôt un composé gauche dessinable (identique à 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();
Si vous utilisez la bibliothèque de matériaux AndroidX, remplacez Android.support.design.R.id.snackbar_text
avec com.google.Android.material.R.id.snackbar_text
.
Avez-vous entendu parler d'ImageSpan? Cela peut vous aider à atteindre votre objectif! Voir ci-dessous le code:
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();]
N'utilisez pas de grandes icônes car elles ne maintiendront pas la gravité.
Ref: Comment afficher l'image dans TextView d'Android?
J'espère que cela a aidé.
Voici tout ce que vous pouvez changer d'un 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!
Malheureusement, nous ne pouvons toujours pas personnaliser le contenu d'un Snackbar
de la même manière que nous le faisons pour Toast
. A l'avenir? Je ne sais pas.
Supposons que vous souhaitiez ajouter une icône à gauche d'un snack-bar. Le code suivant vous aide à y parvenir:
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();
Dans le code ci-dessus, j'ai ajouté une icône d'information à gauche du snack-bar.
Si vous souhaitez ajouter une icône à droite d'un snack-bar, vous devez procéder comme suit:
SpannableStringBuilder buildetTextRight = new SpannableStringBuilder();
buildetTextRight.append(" ");
buildetTextRight.setSpan(new ImageSpan(context, R.drawable.ic_close),
buildetTextRight.length()-1, buildetTextRight.length(), 0);
Dans le code ci-dessus, j'ai ajouté une icône de fermeture à droite du snack-bar.
Vous pouvez également ajouter des vues à SnackbarContentLayout
Code 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()