Изменение шрифта закусочной

Я создаю закусочную по этому коду:

Snackbar sb = Snackbar.make(drawer,  "message", Snackbar.LENGTH_LONG)
                .setAction("action", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {

                    }
                });

Теперь я хочу изменить шрифт кнопки сообщения и действия, но не могу найти какое-либо решение. Как это сделать?

Ответ 1

Вы можете установить TypeFace, получив представление из Snack bar

TextView tv = (TextView) (mSnackBar.getView()).findViewById(android.support.design.R.id.snackbar_text);
Typeface font = Typeface.createFromAsset(getContext().getAssets(), "fonts/font_file.ttf");
tv.setTypeface(font);

Ответ 2

Стилирование текста и действия с закусочной

Вы можете использовать тот же метод для создания стиля snackbar_text и snackbar_action.

После того, как вы создали закусочную, вы можете использовать следующее, чтобы получить представления, связанные с текстом и действием, а затем применить любые корректировки к виду.

Snackbar snackbar = Snackbar.make( ... )    // Create the Snackbar however you like.

TextView snackbarActionTextView = (TextView) snackbar.getView().findViewById( android.support.design.R.id.snackbar_action );
snackbarActionTextView.setTextSize( 20 );
snackbarActionTextView.setTypeface(snackbarActionTextView.getTypeface(), Typeface.BOLD);

TextView snackbarTextView = (TextView) snackbar.getView().findViewById(android.support.design.R.id.snackbar_text);
snackbarTextView.setTextSize( 16 );
snackbarTextView.setMaxLines( 3 );

В моем примере я установил действие размером 20 и полужирным шрифтом, а текст размером 16 и разрешил до 3 строк.

Ответ 3

Получите представление закусочной и примените настройку

TextView tv = (TextView) sb.getView().findViewById(android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.WHITE);
tv.setTypeface(Typeface.createFromAsset(
                    getAssets(),
                    "fonts/ur_file.ttf"));

Или это

SpannableStringBuilder snackbarText = new SpannableStringBuilder();
snackbarText.append("Add ");
int boldStart = snackbarText.length();
snackbarText.append("bold color");
snackbarText.setSpan(new ForegroundColorSpan(0xFFFF0000), boldStart, snackbarText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
snackbarText.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), boldStart, snackbarText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
snackbarText.append(" to Snackbar text");

Snackbar.make(view, snackbarText, Snackbar.LENGTH_LONG).show();

Или вы можете посмотреть на это и на это.

Спасибо.

Ответ 4

В дополнение к этому ответу: теперь пакет для поиска текстового представления в снэк-баре по идентификатору -

val snackText = snackView.findViewById<TextView>(
                    com.google.android.material.R.id.snackbar_text)

Ответ 5

Получить активы

AssetManager assets = context.getAssets();

Получить шрифт

Typeface typeface = Typeface.createFromAsset(assets,PATH OF .TTF FILE);

Путь: font/robotoregular.ttf (если файл.ttf хранится в пути к ресурсам/шрифту)

Ответ 6

Для AndroidX

android.support.design.R.id.snackbar_text не будет доступен.

Use com.google.android.material.R.id.snackbar_textinstead.

Если вы используете kotlin, тогда я предпочитаю использовать функцию расширения:

fun Snackbar.changeFont()
{
    val tv = view.findViewById(com.google.android.material.R.id.snackbar_text) as TextView
    val font = Typeface.createFromAsset(context.assets, "your_font.ttf")
    tv.typeface = font
}

и назовите это как:

mSnakeBar.changeFont()