2011-05-07 125 views
1

我想做吐司点击能够或一个UI元素,它将有可点击的按钮,但行为像吐司。 它不应该像烤面包一样在UI线程上运行。 它不应该停止或覆盖当前的用户活动,消息应该像吐司一样点击按钮并消失,但作为吐司用户应该能够访问后台正在进行的UI项目。Android-制作吐司可点击

如果任何人有任何关于如何实现这个份额与我分享的想法。

+0

@Max whaat是这个USB烤箱??? – om252345 2011-05-07 05:42:34

回答

1

将您的主布局放置在FrameLayout中。使用按钮和全部编写烤面包布局,将其插入FrameLayout(在主布局下方),并将其可见性设置为GONE。

当您显示它(设置VISIBLE的可见性)时,请启动一个新的线程,该线程会倒计时秒数直到其被解散。通过Handler将其设置为不可见(导致所有UI元素只能由主线程管理)。

干杯!

+0

我想要一个像烤面包一样的UI元素,可以在显示消息时访问正在进行的活动。就像我正在玩游戏或在市场上打字或查看某些东西一样,Toast消息不会限制我访问正在进行的工作,请不要暂停游戏,而是同时显示消息。吐司没有clickabke项目,但我想做与吐司相同的功能,但有一个按钮可点击它... – om252345 2011-05-07 06:05:57

+0

是的,而这正是这样做。它显示了主要布局顶部的视图。什么都不停止,一切仍然可以访问(除了直接在新视图的正下方)。但是你也可以查看PopupWindow。我从来没有听说过它,但它看起来像一个更加方便的方式来做你想做的事情。 – pumpkee 2011-05-07 06:13:29

+0

好吧试试这两个,谢谢... – om252345 2011-05-07 06:29:58

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; 
     } 
    } 
}); 
+0

您可以将'durationExpired'放入'Runnable'中,以便更加封装。 – TWiStErRob 2014-12-13 22:07:08

0

小把戏。测试工作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(); 
}