Изменение шрифта закусочной
Я создаю закусочную по этому коду:
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_text
instead.
Если вы используете 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()