2011-11-17 51 views
1

我創建了一個類,該類根據饋入的參數生成PopupWindow。我相信這比我的PopupWindow操縱基於XML的內容更適合我的需求。如何在Android的屏幕上顯示非XML PopupWindow

創建窗口和它的內容似乎順利進行 - 它實際上讓內容出現在屏幕上,我還無法管理。問題是,我一直無法找到一個不依賴於LayoutInflater函數的PopupWindow代碼在屏幕上的示例。由於我的PopupWindow不是從XML文件生成的,因此我無法使用LayoutInflater將它放置在屏幕上。

另外我應該解釋的是,我的PopupWindow生成類是在它自己的文件。即它不是活動文件的子類。我這樣做了,這樣我就可以輕鬆地將我的自定義PopupWindow類複製到我可能開發的任何未來項目中。

這裏是我的課的基本佈局:

class myPopup extends Object { 

    public myPopup(parameters){ 
     ViewGroup winBody; 
     // "winbBody" will be the content of the PopupWindow. 
     // Code that fills and adjusts "winBody" based on the parameters goes here. 

     int width = //Determined by parameters. 
     int height = //Determined by parematers. 
     PopupWindow pw = new PopupWindow(winBody, width, height, true); 
     //This is as far as I seem to get before getting stuck. 
    } 

} 

據我瞭解,我應該以某種方式使用PopupWindow功能「showAtLocation」,但我很清楚我應該用這個東西的參數。有人能告訴我如何讓我的彈出窗口出現在屏幕上嗎?希望在它的中心。 :)

+0

我完全確定這個問題,但是你可以在java中以編程的方式創建PopupWindow佈局,這可能意味着你的窗口可能是一種動態的調用呼叫 – 2011-11-17 17:11:27

+0

是的,這或多或少上面的代碼做了什麼。 (我沒有在這個問題中提供完整的代碼,因爲它很長,大部分與我的問題無關。) – Cambot

+0

使用popupWindow的更新方法怎麼樣? – 2011-11-17 17:25:39

回答

0

嘗試類似的東西

你可以定義整個彈出窗口爲一個活動,只是做它的背景disapear,所以它看起來像一個彈出窗口:

<style name="MyTransparentPopup"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:background">@android:color/transparent</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

public class PopupWindowActivity extends Activity { 

    PopupWindow popUp; 
    LinearLayout layout; 
    TextView tv; 
    LayoutParams params; 
    LinearLayout mainLayout; 
    Button but; 
    boolean click = true; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     popUp = new PopupWindow(this); 
     layout = new LinearLayout(this); 
     mainLayout = new LinearLayout(this); 
     tv = new TextView(this); 
     but = new Button(this); 
     but.setText("Show popup"); 
     but.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       if (click) { 
        popUp.showAtLocation(mainLayout, Gravity.CENTER, 0, 0); 
        popUp.update(0, 0, 300, 80); 
        click = false; 
       } else { 
        popUp.dismiss(); 
        click = true; 
       } 
      } 

     }); 
     params = new LayoutParams(LayoutParams.WRAP_CONTENT, 
       LayoutParams.WRAP_CONTENT); 
     layout.setOrientation(LinearLayout.VERTICAL); 
     tv.setText("Hello popup"); 
     layout.addView(tv, params); 
     popUp.setContentView(layout); 

     mainLayout.addView(but, params); 
     setContentView(mainLayout); 
    } 
    }