5

我正在寫一個應用程序,顯示未接電話和未讀短信在彈出窗口。它還具有提醒功能(關閉彈出窗口並在指定時間後打開它)。它類似於any.do的彈出窗口。像any.do彈出窗口

我能夠通過使用WindowManger創建這樣一個窗口,但由於某些原因,目前爲止我還不明白,彈出窗口在一段時間後消失(儘管應該一直打開,直到用戶關閉它或點擊在需要幾小時的提醒按鈕上)。

這是我創建的現有彈出窗口

windowManager = (WindowManager) context.getApplicationContext() 
      .getSystemService(Context.WINDOW_SERVICE);    
    this.inflater = LayoutInflater.from(context); 
    params = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.MATCH_PARENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
        + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 
        + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSLUCENT); 
    params.gravity = Gravity.BOTTOM; 
    vgPopupWindow = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.popup_mainwindow, null); 
    vgPopupContent = (ViewFlipper) vgPopupWindow.findViewById(R.id.popup_content); 
    vgPopupAreaContent = (ViewGroup) vgPopupWindow.findViewById(R.id.popup_area_content); 
    vgPopupAreaActions = (ViewGroup) vgPopupWindow.findViewById(R.id.popup_area_actions); 
    vgPopupTabs = (LinearLayout) vgPopupWindow.findViewById(R.id.popup_tabs); 
    vgPopupHeader = (LinearLayout) vgPopupWindow.findViewById(R.id.popup_main_header); 
    windowManager.addView(vgPopupWindow, params); 

,因爲我不知道,如果窗口管理器是真的,正確的方法,我也試圖做一個活動同樣具有以下的風格

<style name="PopupWindow" parent="CustomTheme"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowFullscreen">false</item> 
    <item name="android:windowIsTranslucent">true</item> 

它現在看起來就像窗口管理器的版本,但有一個問題:我不能訪問它下面我的應用程序的窗口,因爲窗口的半透明部分看起來很完美,但阻止任何點擊事件窗口下面,以便我不能滾動它或做任何事情。就像任何一樣。我只想讓窗口出現,但不要阻止任何可能性在彈出窗口打開時在下面的窗口上工作。

編輯:我想看到底部彈出窗口,覆蓋30%的窗口,但能夠同時滾動下面的窗口(並在其上執行點擊事件)。

所以我的問題是:

  1. 是窗口管理器,創建此popupwindow的正確方法?
  2. 如果是,爲什麼它消失有時不需要?我如何防止它?
  3. 如果不是,我如何創建一個活動,就像我用WindowManager創建的窗口一樣?
  4. 或者都是錯誤的?在這種情況下;什麼是正確的方式?
+0

你完成了嗎?我需要一些關於此的想法。我所做的是創建一個具有相對佈局的活動,並在botton上放置一些組件,將主題設置爲transpratent,並設置活動動畫從底部進入並退出到底部。但後臺活動一直持續到我的活動正在運行。 – prashantwosti

回答

0

這裏是我以前做的同樣的事情

public class PopupActivity extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     AlertDialog.Builder adb = new Builder(this); 
     AlertDialog dialogTest = adb.setTitle("Test title") 
       .setMessage("Test message") 
       .setNeutralButton("Button", new OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         // do something 
         PopupActivity.this.finish(); 
        } 
       }).create(); 
     adb.setCancelable(false); 
     dialogTest.show(); 
    } 
} 

代碼和

<style name="Theme.Transparent" parent="AppTheme"> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:backgroundDimEnabled">false</item> 
</style> 

設置樣式爲活動清單中的XML風格(這裏https://stackoverflow.com/a/2700683/995020最初發布)文件。然後,只要您想要顯示彈出窗口,就開始活動。您可以將EXTRA數據添加到意圖中並將其用於定製彈出窗口。

+0

我不確定我是否理解。您的意思是您所寫的活動應該像我想要的彈出式窗口或創建活動後啓動的警報窗口?在你發送的鏈接中沒有關於警報窗口的內容。 – richard

+0

只是爲了確保我明確了我的問題。我想看到窗口底部的彈出窗口,覆蓋了30%的窗口,但能夠同時滾動窗口下方的窗口(並在其上執行點擊事件)。 – richard

+0

@理查德,我很懷念你,不幸的。爲了您的目的,我會建議一個帶有兩個元素的RelativeLayout - 主視圖和彈出框(可能是一個片段),將第二個元素附加到底部並隨時更改其可見性。因此用戶會看到彈出窗口,主視圖並能夠與它們進行交互。 –