Android中弹出窗口的大小

11

我在listactivity的onListItemClick事件中创建一个弹出窗口。

LayoutInflater inflater = (LayoutInflater)
this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View pop = inflater.inflate(R.layout.popupcontact, null, false);
ImageView atnot = (ImageView)pop.findViewById(R.id.aNot);
height = pop.getMeasuredHeight();
width = pop.getMeasuredWidth();
Log.e("pw","height: "+String.valueOf(height)+", width: "+String.valueOf(width));
atnot.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        pw.dismiss();
    }
});

 pw = new PopupWindow(pop, width, height, true);

 // The code below assumes that the root container has an id called 'main'
 //pw.showAtLocation(v, Gravity.CENTER, 0, 0); 
 pw.showAsDropDown(v, 10, 5);

现在,高度和宽度的变量应该是弹出窗口(popupcontact)使用的布局的高度和宽度。但它们返回0。我猜这是因为该布局尚未渲染。有没有人知道如何控制弹出窗口的大小而无需使用绝对像素值?

3个回答

45

我遇到了类似的问题。我通过调用以下代码解决了它:

pop.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);

在使用getMeasuredHeight()和getMeasuredWidth()获取布局大小之前


5
我也遇到了同样的问题。这个方法有效,但是高度比原来的要小。 - vignesh

2

我认为你的代码不会起作用,因为你试图获取弹出窗口子视图的宽度和高度。

既然你将弹出窗口锚定到“v”视图,也许可以根据锚定视图设置宽度和高度(或者按比例设置)?


1
如果您想创建一个弹出窗口,请查看创建对话框。如果您想在对话框中使用完全自己的视图,请查看此问题,请确保阅读已接受答案的评论。我认为没有必要自己使用PopupWindow来创建此视图,而对话框功能将使您更轻松地获得结果。
如果您想坚持使用PopupWindow,并且不想更改窗口的宽度和高度,请使用另一个构造函数来创建PopupWindow,有一些可用的构造函数不需要高度和宽度。它们不需要布尔值来聚焦窗口,但似乎您可以稍后通过setFocusable()进行更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接