我需要创建自定义Toast
之类的组件。这应该仅出现在我的应用程序上以显示一些消息。
为什么我不使用android Toast
-因为我需要自定义持续时间。
问题是我正在通过类型为WindowManager.addView
的{{1}}创建视图
但是它只能在1 WindowManager.LayoutParams.TYPE_APPLICATION
上工作,当我关闭它时,吐司消失了。
但是我有很多地方-我在这里进行一项活动来完成某些任务,并且在取得成功之后,我应该立即举杯敬酒并关闭此Activity
。
我需要为我的所有活动保持敬酒,但无需对android系统敬酒。而且我不想使用Activity
,因为它需要其他权限
是否有某种方法可以确保做到这一点?不需要使用TYPE_SYSTEM_ALERT
。
答案 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);