Есть ли способ добавить значок в 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(); 

Есть ли вообще добавить значок вместо текста в .setAction ?

Я знаю, что Google предложил не использовать значок в Snackbar , но я хочу его использовать.

Solutions Collecting From Web of "Есть ли способ добавить значок в 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(); 

Вы слышали о 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: Как отображать изображение в TextView от Android?

Надеюсь, это помогло.

Это все, что вы можете изменить 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 . В будущем? Я не знаю.