Размер всплывающего окна в 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);

теперь переменные height и width должны были быть высотой и шириной макета, используемого для всплывающего окна (popupcontact). Но они возвращают 0. Я думаю, это потому, что макет еще не визуализирован. Кто-нибудь знает, как я могу контролировать размер всплывающего окна без необходимости использовать абсолютные числа пикселей?

3 ответов


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

поскольку вы привязываете всплывающее окно к представлению "v", возможно, установите ширину и высоту в соответствии с представлением якоря (или в соотношении, основанном на них)?


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

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

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


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

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