Размер всплывающего окна в Android - PullRequest
10 голосов
/ 10 июня 2010

Я создаю всплывающее окно со списком в событии 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 ]

43 голосов
/ 20 декабря 2010

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

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

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

2 голосов
/ 23 июля 2010

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

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

1 голос
/ 10 июня 2010

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

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

...