將含圖文、超連結的複雜 Toast 封裝為工具類,任意 Activity 一行調用:
MyToast.show(context, "訊息", R.drawable.icon);
public class MyToast {
public static void show(Context context, String text, @DrawableRes int iconRes) {
// 1. 建立自定義視圖
LinearLayout layout = new LinearLayout(context);
layout.setOrientation(LinearLayout.HORIZONTAL);
layout.setPadding(16, 16, 16, 16);
layout.setBackgroundColor(Color.parseColor("#333333"));
// 2. 圖示
ImageView iv = new ImageView(context);
iv.setImageResource(iconRes);
iv.setLayoutParams(new LinearLayout.LayoutParams(48, 48));
layout.addView(iv);
// 3. 文字 (支援連結)
TextView tv = new TextView(context);
tv.setText(text);
tv.setTextColor(Color.WHITE);
tv.setTextSize(16);
Linkify.addLinks(tv, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS | Linkify.EMAIL_ADDRESSES);
LinearLayout.LayoutParams tvParams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT);
tvParams.weight = 1;
tvParams.setMarginStart(16);
tv.setLayoutParams(tvParams);
layout.addView(tv);
// 4. 建立並顯示 Toast
Toast toast = new Toast(context);
toast.setView(layout);
toast.setDuration(Toast.LENGTH_LONG);
toast.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 100);
toast.show();
}
}
button.setOnClickListener(v ->
MyToast.show(MainActivity.this, "歡迎訪問 https://example.com", R.drawable.ic_launcher)
);