I am using PopupWindow for show validation error with showAsDropDown(anchor).Validation Fields are validated by pressing the save button, so If anchor place under action bar, its popup overlaps actionBar. How do I fix this?
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();
}
}
Popup for validation error 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>
Try popup.setAttachedInDecor(true)
This will attach the popup window to the decor frame of the parent window to avoid overlaping with screen decorations like the navigation bar.
Also you may try using popup.setOverlapAnchor(false)
Sets whether the popup window should overlap its anchor view when displayed as a drop-down.
Hope it helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With