Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中使非XML弹出窗口出现在屏幕上_Android_Visible_Popupwindow - Fatal编程技术网

如何在Android中使非XML弹出窗口出现在屏幕上

如何在Android中使非XML弹出窗口出现在屏幕上,android,visible,popupwindow,Android,Visible,Popupwindow,我创建了一个类,该类根据输入的参数生成PopupWindow。我相信这比为我的PopupWindow操作基于XML的内容更适合我的需要 创建窗口和它的内容似乎进展顺利——它实际上是让我还无法管理的内容出现在屏幕上。问题是,我还没有找到一个使用中的PopupWindow代码示例,它不依赖LayoutFlater函数将其放置在屏幕上。由于我的PopupWindow不是从XML文件生成的,所以我不能使用LayoutInflater将其放置在屏幕上 我还应该解释的是,我的PopupWindow生成类在它

我创建了一个类,该类根据输入的参数生成PopupWindow。我相信这比为我的PopupWindow操作基于XML的内容更适合我的需要

创建窗口和它的内容似乎进展顺利——它实际上是让我还无法管理的内容出现在屏幕上。问题是,我还没有找到一个使用中的PopupWindow代码示例,它不依赖LayoutFlater函数将其放置在屏幕上。由于我的PopupWindow不是从XML文件生成的,所以我不能使用LayoutInflater将其放置在屏幕上

我还应该解释的是,我的PopupWindow生成类在它自己的文件中。i、 e.它不是活动文件的子类。我这样做是为了便于将自定义的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”,但我不清楚我应该使用什么参数。有人能告诉我如何让我的弹出窗口出现在屏幕上吗?希望就在它的中心。:)

试试这样吧

您可以将整个弹出窗口定义为一个活动,只需清除其背景,使其看起来像一个弹出窗口:

<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>

我完全确定这个问题,但是您可以用java编程创建PopupWindow布局,这可能意味着您的窗口从调用到调用都是动态的,这或多或少就是上面的代码所做的。(在这个问题上,我没有提供完整的代码,因为它相当长,而且大部分与我的问题无关。)使用popupWindow的更新方法怎么样?“更新”似乎需要一个“视图”参数作为“锚”(我假设这意味着父“视图”对象,popupWindow将成为它的子对象。)我应该把什么价值放在那里?不确定:),可以调查一下,先试试我的帖子,也许会有用
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);
    }
    }