21

現在、アプリを開発しようとしています。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」の場所に変数を設定したい..ローカル変数で試しました..それは機能しません

サンプルソースコードに関するヘルプは、私にとって本当に素晴らしいものになります。

4

6 に答える 6

34

答えはここにあります:https ://stackoverflow.com/a/13231981

少しリファクタリングした後:

    トーストトースト=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();

これは私にとって魅力のように機能しました!

于 2013-03-29T18:16:47.067 に答える
19

公式ドキュメントから:

カスタムToastViewを作成します

単純なテキストメッセージでは不十分な場合は、トースト通知用にカスタマイズされたレイアウトを作成できます。カスタムレイアウトを作成するには、XMLまたはアプリケーションコードでビューレイアウトを定義し、ルートビューオブジェクトをsetView(View)メソッドに渡します。

公式のGoogleドキュメントへのリンクをたどると、例が提供されます。

于 2010-05-30T22:01:52.990 に答える
10

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);
    }
}
于 2014-05-13T16:43:31.273 に答える
3

残念ながら、Javaページのコードにはバグがあります。これは、テキストを提供する実装可能な機能へのリンクです(テストしたのでわかります)。少し工夫すれば、サイズや色などの引数を渡すように拡張できます...

トーストフォントサイズ機能はこちら

于 2013-02-20T20:07:23.187 に答える
1

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()
于 2019-03-26T14:18:07.863 に答える
0

このソリューションをkotlinで使用しました

CustomViewまたはFragmentで

 fun persianToast(message: String): Toast {
    return Toast.makeText(context, message, Toast.LENGTH_SHORT).also {
        val view = it.view as LinearLayout
        val tv = view.getChildAt(0) as TextView
        val typeFace = Typeface.createFromAsset(context?.assets, MyApplication.getFont(MyApplication.LIGHT_FONT))
        tv.typeface = typeFace
    }
 }

MyApplicationクラス:

class MyApplication : Application() {
companion object {
     const val NORMAL_FONT = 0
     const val BOLD_FONT = 1
     const val MEDIUM_FONT = 2
     const val LIGHT_FONT = 3
     const val ULTRA_LIGHT_FONT = 4

    @JvmStatic
    fun getFont(type: Int): String {
        return when (type) {
            LIGHT_FONT -> "font/fontLight.ttf"
            BOLD_FONT -> "font/fontBold.ttf"
            MEDIUM_FONT -> "font/fontMedium.ttf"
            ULTRA_LIGHT_FONT -> "font/fontUltraLight.ttf"
            else -> "font/fontNormal.ttf"
        }
    }
}

フラグメントで使用:

  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        Toast(context)
        persianToast("javid sattar").show()
}

幸運を!!

于 2020-09-09T06:58:56.533 に答える