Подтвердить что ты не робот

Показать всплывающее окно централизованного

У меня есть всплывающие окна в моем приложении, это полноэкранный и следующий код:

    content.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    content.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    int screenWidth = windowManager.getDefaultDisplay().getWidth();
    int screenHeight = windowManager.getDefaultDisplay().getHeight();
    int x = screenWidth / 2 - content.getMeasuredWidth() / 2;
    int y = screenHeight / 2 - content.getMeasuredHeight() / 2;
    window.showAtLocation(content, Gravity.NO_GRAVITY, x, y);

Сделайте отображение окна в центре.

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

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

Как я могу это сделать? Или есть более простой способ просто всплывающего окна только по центру?

4b9b3361

Ответ 1

popupWindow.showAtLocation(anyViewOnlyNeededForWindowToken, Gravity.CENTER, 0, 0);

Это центрирует ваше представление.

Мне потребовалось 2 часа боли, чтобы понять это. Мне не нужны математики черной магии, чтобы справиться с этим.

Вид необходим только для токена окна, он не оказывает другого влияния на местоположение.

Gravity сообщает менеджеру компоновки, где следует начинать систему координат и как обрабатывать эти координаты. Я не могу найти документы, но хакинг показывает мне, что:

  • CENTER использует середину всплывающего окна для выравнивания по указанному x, y. Таким образом, 0,0 имеет ориентацию экрана
  • BOTTOM использует нижнюю часть всплывающего окна для выравнивания с указанными x, y. Таким образом, 0,0 имеет выпадающее меню, выровненное со дном экрана. Если вы хотите заполнить 10px, тогда y = 10 (не -10), чтобы переместить всплывающее окно на 10 пикселей.

Я написал это здесь Android PopupWindow.showAtLocation() и эффекты Gravity

Ответ 2

        View popupView = layoutInflater.inflate(R.layout.index_popviewxml,
                null);


        final PopupWindow popupWindow = new PopupWindow(popupView,
                LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, true);



        popupWindow.setTouchable(true);
        popupWindow.setFocusable(true);

        popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);