У меня небольшая проблема с всплывающим окном, отображаемым методом showAtLocation. Это мой макет:
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="2dp"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="10dp"
card_view:cardUseCompatPadding="true">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/menuContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:fitsSystemWindows="false">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="@dimen/itemSearchMargin"
android:text="@string/itemSearchPopup"
android:textColor="@android:color/black"
android:textSize="@dimen/titleitemSearchTextSize"
android:textStyle="bold"
card_view:layout_constraintStart_toStartOf="parent"
card_view:layout_constraintTop_toTopOf="parent" />
<androidx.cardview.widget.CardView
android:id="@+id/cardviewSearch"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="14dp"
android:layout_marginEnd="14dp"
card_view:cardCornerRadius="2dp"
card_view:cardUseCompatPadding="true"
card_view:layout_constraintEnd_toEndOf="parent"
card_view:layout_constraintStart_toStartOf="parent"
card_view:layout_constraintTop_toBottomOf="@+id/popupSearchSubtitle">
<RelativeLayout
android:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:gravity="center_vertical">
<EditText
android:id="@+id/hub3_search_edit"
android:layout_width="match_parent"
android:layout_height="@dimen/itemSearchEditTextHeight"
android:background="@android:color/transparent"
android:gravity="center_vertical"
android:hint="@string/Search"
android:imeOptions="actionSearch"
android:inputType="text"
android:lines="1"
android:paddingStart="5dp"
android:paddingEnd="@dimen/itemSearchEditTextPaddingEnd"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:textColor="#FF000000"
android:textSize="16sp" />
<ImageButton
android:id="@+id/hub3_search_button"
android:layout_width="@dimen/itemSearchEditTextHeight"
android:layout_height="@dimen/itemSearchEditTextHeight"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:src="@drawable/magnify" />
<ImageView
android:id="@+id/hub3_cancel_button"
android:layout_width="@dimen/itemSearchXSize"
android:layout_height="@dimen/itemSearchXSize"
android:layout_centerVertical="true"
android:layout_toStartOf="@id/hub3_search_button"
android:src="@drawable/close"
android:layout_marginEnd="5dp"
android:visibility="gone" />
</RelativeLayout>
</androidx.cardview.widget.CardView>
<TextView
android:id="@+id/popupSearchSubtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="@dimen/itemSearchMargin"
android:text="@string/popupSearchSubtitle"
android:textColor="@android:color/black"
android:textSize="@dimen/itemSearchSubtitle"
card_view:layout_constraintStart_toStartOf="parent"
card_view:layout_constraintTop_toBottomOf="@+id/title" />
<TextView
android:id="@+id/bodyItemSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:layout_marginBottom="8dp"
android:gravity="center"
android:text="@string/bodyItemSearch"
android:textColor="@android:color/black"
android:textSize="14sp"
card_view:layout_constraintBottom_toTopOf="@+id/imageBodyItemSearch"
card_view:layout_constraintEnd_toEndOf="parent"
card_view:layout_constraintHorizontal_bias="0.5"
card_view:layout_constraintStart_toStartOf="parent"
card_view:layout_constraintTop_toBottomOf="@+id/cardviewSearch"
card_view:layout_constraintVertical_bias="0.3"
card_view:layout_constraintVertical_chainStyle="packed" />
<ImageView
android:id="@+id/imageBodyItemSearch"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginTop="8dp"
card_view:layout_constraintBottom_toBottomOf="parent"
card_view:layout_constraintEnd_toEndOf="parent"
card_view:layout_constraintHorizontal_bias="0.5"
card_view:layout_constraintStart_toStartOf="parent"
card_view:layout_constraintTop_toBottomOf="@+id/bodyItemSearch"
card_view:layout_constraintVertical_chainStyle="packed"
card_view:srcCompat="@drawable/icon_search_item" />
<androidx.constraintlayout.widget.Group
android:id="@+id/groupbodyItemSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible"
card_view:constraint_referenced_ids="bodyItemSearch,imageBodyItemSearch" />
<ProgressBar
android:id="@+id/progressBarItemSearch"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
card_view:layout_constraintBottom_toBottomOf="parent"
card_view:layout_constraintEnd_toEndOf="parent"
card_view:layout_constraintHorizontal_bias="0.5"
card_view:layout_constraintStart_toStartOf="parent"
card_view:layout_constraintTop_toBottomOf="@+id/cardviewSearch"
card_view:layout_constraintVertical_chainStyle="packed" />
<androidx.constraintlayout.widget.Group
android:id="@+id/groupLoadingItemSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
card_view:constraint_referenced_ids="progressBarItemSearch" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/itemSearchList"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/grayF4"
card_view:layout_constraintBottom_toBottomOf="parent"
card_view:layout_constraintEnd_toEndOf="parent"
card_view:layout_constraintStart_toStartOf="parent"
card_view:layout_constraintTop_toBottomOf="@+id/searchFoundItemSearch"/>
<TextView
android:id="@+id/searchFoundItemSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text=""
android:textStyle="italic"
android:textColor="@android:color/black"
android:textSize="@dimen/itemSearchSubtitle"
card_view:layout_constraintStart_toStartOf="parent"
card_view:layout_constraintTop_toBottomOf="@+id/cardviewSearch" />
<androidx.constraintlayout.widget.Group
android:id="@+id/searchListGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
card_view:constraint_referenced_ids="itemSearchList,searchFoundItemSearch" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
Мне нужно исправить всплывающее окно с некоторыми координатами x, y, и для этого я использовал этот метод:
popupWindow.showAtLocation (anchor, Gravity.NO_GRAVITY, location [0], location [1])
, когда окно реселлера пусто и клавиатура отображается, всплывающие окна отображаются в правильном положении, но, к сожалению, когда представление ресайклера не пусто и клавиатурапоказано, что всплывающие окна не отражают ее положение и перемещаются вверх
РЕДАКТИРОВАТЬ: я использовал showAtLocation, потому что с showAsDropDown popupView следуют за привязкой также во время обновления пользовательского интерфейса, и это приводит к быстромудвижение от случайного положения к правильному. Я попытался решить, используя showAtLocation для координат, координат, у ... с вашим решением, я полагаю, у меня возникнет та же проблема, что и с showAsDropDown