Android - PopupWindow над определенным представлением - программирование
Подтвердить что ты не робот

Android - PopupWindow над определенным представлением

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

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

Единственными методами, которые кажутся релевантными, являются showAsDropDown (View anchor, int xoff, int yoff) и showAtLocation (View parent, int gravity, int x, int y). Проблема с showAsDropDown заключается в том, что она привязана к нижнему левому углу представления.

Есть ли другой способ реализовать это?

4b9b3361

Ответ 1

popupWindow.showAtLocation(...) фактически показывает, что окно абсолютно позиционируется на экране (даже приложение). Якорь в этом вызове используется только для его токена окна. Координаты являются смещениями от заданного значения силы тяжести.

Что вы на самом деле хотите использовать:

popupWindow.showAsDropDown(anchor, offsetX, offsetY, gravity);

Этот вызов доступен только в API 19+, поэтому в более ранних версиях вам необходимо использовать:

popupWindow.showAsDropdown(anchor, offsetX, offsetY);

Эти вызовы показывают всплывающее окно относительно указанного представления привязки. Обратите внимание, что гравитация по умолчанию (при вызове без заданной силы тяжести) равна Gravity.TOP|Gravity.START, поэтому, если вы явно используете Gravity.LEFT в разных местах вашего приложения, у вас будет плохое время:)

Ответ 2

popupWindow.showAtLocation(anchor, Gravity.BOTTOM, 0, anchor.getHeight());

Ответ 3

Тот, который вы хотите использовать, showAtLocation(...). Вы указываете якорный вид (тот, который пользователь нажимает), и расположите его относительно этого с помощью параметра gravity и смещения. Подумайте о параметре gravity, таком как PopupWindow, почти как дочерний вид, а родительский вид похож на макет контейнера.

Вы должны указать Gravity.LEFT | Gravity.TOP в качестве параметра.

Ответ 4

Вам просто нужно было переместить popupWindow по высоте его привязки, используя параметр yoff в синтаксисе showAsDropDown (View anchor, int xoff, int yoff).

popupWindow.showAsDropDown(anchor, 0, -anchor.getHeight()+popupView.getHeight);

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

Ответ 5

У меня есть этот код: PopupWindow ниже определенного вида (Gravity End) для всех версий sdk.

        // display the popup[![enter image description here][1]][1]
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            mPopupWindow.showAsDropDown(v, 0, 0, Gravity.END);
        } else {
            mPopupWindow.showAsDropDown(v, v.getWidth() - mPopupWindow.getWidth(), 0);
        }

Здесь View v - это календарь ImageButton.

Ответ 6

popupwindow.showAsDropDown(anchor, 0, -125); эта вещь работает для меня