我想制作toast click able或UI元素,它将具有可点击的按钮,但表现得像烤面包。 它不应该像在toast上的UI线程上运行。 它不应该暂停或覆盖当前的用户活动,消息应该像带有可点击按钮的吐司一样消失但是因为吐司用户应该能够访问后台正在进行的UI项目。
如果有人知道如何实现这一点请与我分享。
答案 0 :(得分:2)
Gmail撤消栏最适合您,就像带按钮的祝酒词。 这是它的代码实现。
答案 1 :(得分:2)
我有类似的要求,我使用PopupWindow解决了。基本上,我有一个带有可点击链接的窗口,我希望它像吐司一样显示。弹出窗口可以按如下方式完成此操作:
在父类中,我使用以下标志:
private boolean durationExpired = false;
然后,当我调用吐司时,我会执行以下操作:
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.about_hiittimer,
(ViewGroup) findViewById(R.id.about_hiittimer));
TextView url = (TextView) layout.findViewById(R.id.url);
url.setMovementMethod(LinkMovementMethod.getInstance());
final PopupWindow popupWindow = new PopupWindow(layout, 280, 160, false);
popupWindow.showAtLocation(layout, 17, 0, 0);
popupWindow.setTouchable(true);
popupWindow.setOutsideTouchable(true);
final Handler popupHandler = new Handler();
runOnUiThread(new Runnable() {
@Override
public void run() {
if (!durationExpired) {
durationExpired = true;
popupHandler.postDelayed(this, 2000);
} else {
popupWindow.dismiss();
popupHandler.removeCallbacks(this);
durationExpired = false;
}
}
});
答案 2 :(得分:2)
小技巧。测试工作Android 4.4
toast = new Toast(context);
try {
Class<?> clazz = Class.forName("android.widget.Toast");
Method method = clazz.getDeclaredMethod("getWindowParams");
WindowManager.LayoutParams param = (WindowManager.LayoutParams) method.invoke(toast);
param.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
} catch (Exception e) {
e.printStackTrace();
}
答案 3 :(得分:1)
将主要布局放在FrameLayout中。为您的吐司写一个布局,使用按钮和所有,将其插入FrameLayout(在主布局下面)并将其可见性设置为GONE。
当你显示它时(将可见性设置为VISIBLE)启动一个新的线程,倒计时秒,直到它被解雇。通过Handler将其设置为从线程中不可见(因为所有UI元素只能通过主线程进行管理)。
喝彩!