Размер окна всплывающего окна в android

Я создаю всплывающее окно в 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. Я предполагаю, что это потому, что макет еще не отображается. Кто-нибудь знает, как я могу контролировать размер всплывающего окна без необходимости использовать абсолютные числа пикселей?

    Я не думаю, что ваш код будет работать, потому что вы пытаетесь получить ширину и высоту представления, являющегося дочерним элементом вашего всплывающего окна.

    Так как вы привязываете popupwindow к представлению «v», возможно, установите ширину и высоту в соответствии с представлением привязки (или в зависимости от них)?

    У меня была аналогичная проблема. Я решил это, позвонив:

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

    Перед тем, как получить размер макета с помощью getMeasuredHeight () и getMeasuredWidth ()

    Если вы хотите создать всплывающее окно, посмотрите на « Создание диалоговых окон». Если вы хотите использовать полный собственный вид в своем диалоговом окне, посмотрите на этот вопрос, не забудьте прочитать комментарии к принятому ответу. Я думаю, что нет необходимости использовать PopupWindow для создания этого представления, и материал диалога поможет вам получить результат намного проще.

    Если вы хотите использовать PopupWindow, и вы не хотите менять ширину и высоту вашего окна, просто используйте другой конструктор для PopupWindow, есть некоторые доступные, которые не нуждаются в высоте и ширине. Они не берут логическое значение для возможности фокусировки окна, но, похоже, вы можете изменить это позже с помощью setFocusable () .