Toast の文字の大きさを大きくしたい。
という思いから調べたところ、純正からはそのような記事は見つからなかった。
説明されている複数のサイトでカスタマイズする方法が分かりました。
ですが、自分のプログラムに組み込むには問題があり例外が発生してしまう。
複数の方法を組み合わせて自分のものに使えるように調整した。
【参考】
※【Android Studio】Toast に画像・テキストを追加するカスタマイズ方法
https#//codeforfun.jp/android-studio-how-to-customize-toast/
※ [Android] Toast をカスタマイズする
https#//akira-watson.com/android/toast-custom.html
【注意】
ViewModel でViewの参照の値を保存することはメモリリークの原因になります。
メソッド内で参照を作成した場合はメソッドが終了すると参照をシステムが切ってくれます。多分^^;
アプリケーションの Context が求められれば、ViewModelのメソッド内でViewが作成できる。
そのViewをToastに設定して表示する。
Viewの構成は、custom_toast.xmlに記載しておく。
※ toast.setView(view) は、非推奨になりました。最新のOSでは、いずれ使用できなくなります。
【MainViewModel.kt】
class MainViewModel(app:Application): AndroidViewModel(app) {
fun toastMake(text:String) {
val view: View = LayoutInflater.from(getContext())
.inflate(
R.layout.custom_toast,
null
)
view.findViewById(R.id.toast_message).text = text
val toast: Toast =
Toast.makeText(
view.context,
"",
Toast.LENGTH_LONG
)
toast.setGravity(
Gravity.CENTER,
0,
200
)
toast.setView(view) // 非推奨
toast.show()
}
}
【custom_toast.xml】 res/layout に作成。
< RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relative_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
< TextView
android:id="@+id/toast_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="@drawable/message_frame"
android:textColor="@color/background_color"
android:textStyle="bold"
android:textSize="24sp"
/>
< /RelativeLayout>
android:background="@drawable/message_frame"
枠の設計を別にしています。
色や形状をカスタマイズ。説明は省略。