2011-05-07 315 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(); 
}