我正在onListItemClick事件中的listactivity中创建一个弹出窗口。
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.我想这是因为布局尚未呈现。有没有人有线索,如何控制弹出窗口的大小而不需要使用绝对像素数?
答案 0 :(得分:43)
我有类似的问题。我通过致电解决了这个问题:
pop.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
在使用getMeasuredHeight()和getMeasuredWidth()获取布局大小之前
答案 1 :(得分:2)
我认为您的代码不会起作用,因为您试图获取视图的宽度和高度,该视图是弹出窗口的子视图。
由于您将弹出窗口锚定到“v”视图,可以根据锚视图(或基于它们的比率)设置宽度和高度?
答案 2 :(得分:1)
如果要创建弹出窗口,请查看Creating Dialogs。 如果您想在对话框中使用完整的自己的视图,请查看此question,请务必阅读有关已接受答案的评论。我认为没有必要自己使用PopupWindow来创建这个视图,对话框的内容会让你更容易获得结果。
如果您想坚持使用PopupWindow并且您不想更改窗口的宽度和高度,只需使用另一个constructor用于PopupWindow,有些可用的不需要高度和宽度。它们没有采用布尔值来聚焦窗口,但似乎您可以稍后通过setFocusable()进行更改。