定制吐司

时间:2019-07-15 08:45:56

标签: android android-toast

我需要创建自定义Toast之类的组件。这应该仅出现在我的应用程序上以显示一些消息。

为什么我不使用android Toast-因为我需要自定义持续时间。

问题是我正在通过类型为WindowManager.addView的{​​{1}}创建视图

但是它只能在1 WindowManager.LayoutParams.TYPE_APPLICATION上工作,当我关闭它时,吐司消失了。

但是我有很多地方-我在这里进行一项活动来完成某些任务,并且在取得成功之后,我应该立即举杯敬酒并关闭此Activity

我需要为我的所有活动保持敬酒,但无需对android系统敬酒。而且我不想使用Activity,因为它需要其他权限

是否有某种方法可以确保做到这一点?不需要使用TYPE_SYSTEM_ALERT

1 个答案:

答案 0 :(得分:1)

尝试个性化定制吐司

public static void Toast(String textmessage) {

    LinearLayout layout = new LinearLayout(getContext());
    layout.setBackgroundResource(R.drawable.shape_toast);
    layout.setPadding(30, 30, 30, 30);

    TextView tv = new TextView(getContext());
    tv.setTextColor(Color.WHITE);
    tv.setTextSize(12);
    tv.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/font.ttf"));

    tv.setGravity(Gravity.CENTER);
    tv.setText(textmessage);

    layout.addView(tv);

    Toast toast = new Toast(getContext());
    toast.setView(layout);

    toast.setGravity(Gravity.BOTTOM, 0, 240);
    toast.show();

}

您可以尝试将其与持续时间融为一体

public class ToastExpander {

    public static final String TAG = "ToastExpander";

    public static void showFor(final Toast aToast, final long durationInMilliseconds) {

        aToast.setDuration(Toast.LENGTH_SHORT);

        Thread t = new Thread() {
            long timeElapsed = 0l;

            public void run() {
                try {
                    while (timeElapsed <= durationInMilliseconds) {
                        long start = System.currentTimeMillis();
                        aToast.show();
                        sleep(1750);
                        timeElapsed += System.currentTimeMillis() - start;
                    }
                } catch (InterruptedException e) {
                    Log.e(TAG, e.toString());
                }
            }
        };
        t.start();
    }
}

和表演吐司使用

Toast aToast = Toast.makeText(this, "Hello World", Toast.LENGTH_SHORT);
ToastExpander.showFor(aToast, 5000);