Изменить тостов шрифта
-
05-10-2019 - |
Вопрос
В настоящее время я пытаюсь разработать приложение. И я не знаю, как изменить тост шрифт. Отказ
final OnClickListener clickListener = new OnClickListener() {
public void onClick(View v) {
try {
Toast.makeText(nova.this,"Hello", 500000).show();
}
catch (Exception e) {
Toast.makeText(nova.this,"Exception:" +e, 500000);
}
}
};
Я хочу изменить текст «Привет» с пользовательским шрифтом, который я пробовал с шрифтом.
И тогда я хочу установить переменную на место «TextClicked» .. я пытался с локальной переменной .. Но это не работает
Любая помощь с примером исходного кода будет очень хорош для меня.
Решение
Из официальной документации:
Создайте свой Custom ToastView
Если простое текстовое сообщение недостаточно, вы можете создать индивидуальный макет для вашего уведомления о тосте. Чтобы создать пользовательскую планировку, определите макет просмотра, в XML или в вашем приложении и передайте объект Root View к
setView(View)
метод.
После ссылки на официальную документацию Google предоставлю примеры.
Другие советы
Ответ здесь: https://stackoverflow.com/a/13231981.
После рефакторинга немного:
Toast Toast = Toast.maketext (контекст, r.string.yummytaast, toast.length_short); Linearlayout toastlayout = (linearlayout) toast.getView (); TEXTVIEW TOATTTV = (TEXTVIEW) TOASTLAYOUT.GETCHILDAT (0); toasttv.settextsize (30); Toast.show ();
Это работало для меня, как очарование!
Вы можете использовать SpannableString, чтобы установить шрифт:
Typeface font = Typeface.createFromAsset(getAssets(), "fonts/ATaha.ttf");
SpannableString efr = new SpannableString("Toast font changed!");
efr.setSpan(new TypefaceSpan(font), 0, efr.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Toast.makeText(this, efr, Toast.LENGTH_SHORT).show();
Пользовательский класс SPAN, который имеет определенный набор типа:
public class TypefaceSpan extends MetricAffectingSpan {
private Typeface mTypeface;
public TypefaceSpan(Typeface typeface) {
mTypeface = typeface;
}
@Override
public void updateMeasureState(TextPaint p) {
p.setTypeface(mTypeface);
p.setFlags(p.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
}
@Override
public void updateDrawState(TextPaint tp) {
tp.setTypeface(mTypeface);
tp.setFlags(tp.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
}
}
К сожалению, код на странице Java прокладывается. Вот ссылка на рабочую функцию, которую вы можете реализовать, которая дает вам текст (я знаю, потому что я тестировал его), а с небольшой изобретательностью можно расширить для передачи аргументов для размера, цвет и т. Д.
Функция размера тоста шрифта здесь
Функция Kotlin:
fun makeLargeTextToast(text: CharSequence): Toast {
return Toast.makeText(applicationContext, text, Toast.LENGTH_LONG).also {
val toastLayout = it.view as LinearLayout
val toastTV = toastLayout.getChildAt(0) as TextView
toastTV.textSize = 30f
}
}
Используйте это как:
makeLargeTextToast("text message").show()