2011-11-17 48 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); 
    } 
    }