ShowAsDropDown(anchor)でのshowvalidationエラーにPopupWindowを使用しています。検証フィールドは保存ボタンを押すことで検証されるため、アンカーがアクションバーの下にある場合、そのポップアップはactionBarとオーバーラップします。これを修正するにはどうすればよいですか?
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>
editText.requestFocus()
を呼び出す前にshowPopup(...)
を呼び出してみて、それが機能したかどうかを知らせてください。