web-dev-qa-db-ja.com

PopupWindowがActionBarとオーバーラップしています

ShowAsDropDown(anchor)でのshowvalidationエラーにPopupWindowを使用しています。検証フィールドは保存ボタンを押すことで検証されるため、アンカーがアクションバーの下にある場合、そのポップアップはactionBarとオーバーラップします。これを修正するにはどうすればよいですか?

Example

 protected void showPopup(View anchorPlace) {
    popupContainer.removeAllViews();
    popupContainer.addView(recyclerErrors);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
        popupContainer.setElevation(0);
        anchorPlace.setElevation(0);
        popup.setElevation(0);
    }
    recyclerErrors.setOnClickListener(v -> dismissPopup());
    popup.setContentView(popupContainer);
    if (anchorPlace != null) {
        popup.setWidth(anchorPlace.getWidth());
    }
    popup.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
    popup.setOutsideTouchable(true);
    popup.setFocusable(false);
    popup.setTouchable(true);
    popup.setBackgroundDrawable(null);

    if (anchorPlace != null) {
        PopupWindowCompat.showAsDropDown(popup, anchorPlace, 0, 0, Gravity.BOTTOM);
    }

    if (popup.isAboveAnchor()) {
        popup.dismiss();
    }
}

検証エラーXMLのポップアップ:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">

<ImageView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginStart="20dp"
    app:srcCompat="@drawable/warning_triangle" />

<TextView
    Android:id="@+id/error_field_error_txt"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="@drawable/warning_bcg"
    Android:drawableStart="@drawable/ic_warning"
    Android:drawablePadding="@dimen/settings_error_body_padding_top_bottom"
    Android:gravity="center_vertical"
    Android:paddingStart="@dimen/settings_error_body_padding_start_end"
    Android:paddingTop="@dimen/settings_error_body_padding_top_bottom"
    Android:paddingEnd="@dimen/settings_error_body_padding_start_end"
    Android:paddingBottom="@dimen/settings_error_body_padding_top_bottom"
    Android:textColor="@Android:color/white"
    Android:textSize="@dimen/settings_error_text_size"
    Android:textStyle="bold"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"/></LinearLayout>
7
kalugin1912

editText.requestFocus()を呼び出す前にshowPopup(...)を呼び出してみて、それが機能したかどうかを知らせてください。

0
Niraj