Change Toast police
-
05-10-2019 - |
Question
À l'heure actuelle, je suis en train de développer une application. et je ne sais pas comment changer la police Toast. .
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);
}
}
};
Je souhaite modifier le texte « Bonjour » avec la police personnalisée J'ai essayé avec TypeFace.
Et puis, je veux définir une variable à l'endroit « TextClicked » .. Je l'ai essayé avec une variable locale .. mais il ne fonctionne pas
toute aide par exemple le code source sera vraiment super pour moi.
La solution
De la documentation officielle:
Créez votre ToastView personnalisée
Si un message de texte simple ne suffit pas, vous pouvez créer une mise en page personnalisée pour votre notification de pain grillé. Pour créer une mise en page personnalisée, définir une mise en page View, en XML ou dans votre code d'application, et passez la racine Voir objet à la méthode
setView(View)
.
En suivant le lien à la documentation officielle de Google fournira des exemples.
Autres conseils
La réponse est ici: https://stackoverflow.com/a/13231981
Après refactorisation un peu:
Toast toast = Toast.makeText(context, R.string.yummyToast, Toast.LENGTH_SHORT); LinearLayout toastLayout = (LinearLayout) toast.getView(); TextView toastTV = (TextView) toastLayout.getChildAt(0); toastTV.setTextSize(30); toast.show();
Cela a fonctionné pour moi comme un charme!
Vous pouvez utiliser un SpannableString pour définir la police:
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();
Une classe personnalisée Span qui a un ensemble de Typeface spécifique:
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);
}
}
Malheureusement, le code sur la page Java est mis sur écoute. Voici un lien vers une fonction de travail, vous pouvez mettre en œuvre que vous donne le texte (je sais, parce que je l'ai testé), et avec un peu d'ingéniosité, pourrait être élargi pour passer des arguments pour la taille, la couleur, etc ...
Fonction 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
}
}
Utilisez comme:
makeLargeTextToast("text message").show()