現在、アプリを開発しようとしています。 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);
}
}
};
TypeFaceで試したカスタムフォントで「Hello」というテキストを変更したい。
次に、「TextClicked」の場所に変数を設定したい..ローカル変数で試しました..しかし、それは機能しません
サンプルソースコードのヘルプは私にとって本当に素晴らしいでしょう。
公式ドキュメントから:
単純なテキストメッセージでは不十分な場合は、トースト通知用にカスタマイズされたレイアウトを作成できます。カスタムレイアウトを作成するには、XMLまたはアプリケーションコードでビューレイアウトを定義し、ルートビューオブジェクトを
setView(View)
メソッドに渡します。
公式のGoogleドキュメントへのリンクをたどると、例が提供されます。
答えはここにあります: https://stackoverflow.com/a/13231981
少しリファクタリングした後:
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();
これは私にとって魅力のように機能しました!
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()