【问题标题】:popupwindow not working with setContentView弹出窗口不适用于 setContentView
【发布时间】:2013-07-08 18:52:40
【问题描述】:

解决方案

感谢 codeMagic 的答案中的一条线索,该问题的解决方案是使用 setWidth()setHeight() 方法设置宽度和高度



问题

我正在尝试使用以下代码在 Android 中显示 PopupWindow,但它似乎不起作用
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        PopupWindow test = new PopupWindow();
        test.setContentView(inflater.inflate(R.layout.test, null, false));
        test.showAtLocation(findViewById(R.id.main_container), Gravity.CENTER, 0, 0);
    }
    ....
}

你能告诉我哪里出错了吗?

编辑: 我希望弹出窗口显示的内容包含我在 R.id.test 中的布局,但是当我执行上面的代码时,什么也没有发生。没有错误或任何错误

编辑2: 在原始代码中添加了一些上下文

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    我决定使用PopupWindow 来完成我现在的工作。我的是ListView,所以它可能有点不同,但我必须改变一些东西才能看到它。以下是我建议您查看的一些内容,因为我没有发现您的代码有任何明显错误。

    1. 首先膨胀你的View,并确保它不会返回null
    2. 使用不同的构造函数(我使用了new PopupWindow(holder.textNotes, 500, 500, true); - 将holder.textNotes 替换为您的充气View,并将尺寸替换为适合您正在处理的屏幕的尺寸。 注意我使用了这个构造函数,所以我可以让它为 EditText 聚焦

    3 .我给了我的View 一个背景颜色,这样我就可以确保它正在显示

    在创建PopupWindow 的实例时可以使用多种不同的构造函数,您可以在here in the Docs 中找到这些构造函数。我上面使用的那个允许你设置窗口的heightwidth。正如 vidhu 在 cmets 中指出的那样,这可以避免调用 setHeight()setWidth()

    【讨论】:

    • 我编辑了我的问题。我也必须充气才能传入 view 对象。 R.layout.test 只是一个 integer
    • 对不起,你是对的。我在想它有一种方法可以像Activity 那样采用resId。我会再看一些。您能否展示您是如何调用此代码的,或者您是否进行了调试以确保它被正确调用?
    • 嗨,我添加了更多编辑。我基本上是在我的主要活动的 onCreate 事件中调用此代码。是的,我调试了它,它执行代码。我创建或调用弹出窗口的方式肯定有问题,但我似乎无法弄清楚原因
    • R.id.main_containerViewactivity_main 内吗?如果是这样,我会在setContentView() 之后的下一行放置一个断点,并确保inflater.inflate(R.layout.test 不会返回null
    • 我用我遇到的一些事情更新了我的答案,以防他们可以帮助您找到您的问题
    【解决方案2】:

    你应该调用方法update 显示您的弹出窗口

    【讨论】:

    • 只有当它已经显示并且你想更新内容时才需要它
    • 根据您的链接,它显示“更新弹出窗口的位置和尺寸”,但问题是,它一开始并没有显示出来
    • 这里是相同的question 这个脚本不起作用? PopupWindow test = new PopupWindow(); test.setContentView(inflater.inflate(R.layout.test, null, false)); test.showAtLocation(findViewById(R.id.main_container), Gravity.CENTER, 0, 0); test.udpate(0,0,300,100);
    • @cooperok 我在我的问题中添加了解决方案。 update() 方法起作用的原因是它还设置了弹出窗口的宽度和高度。所以解决方法是通过调用setWith()和setHeight()方法来设置窗口的宽高。
    猜你喜欢
    • 2016-06-05
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多