【问题标题】:PopupWindow overlaps ActionBarPopupWindow 与 ActionBar 重叠
【发布时间】:2019-12-09 15:50:58
【问题描述】:

我使用 PopupWindow 显示验证错误 showAsDropDown(anchor).Validation 字段通过按下保存按钮进行验证,因此如果锚点位于操作栏下方,则其弹出窗口与操作栏重叠。我该如何解决这个问题?

 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>

【问题讨论】:

  • 请添加xml代码
  • ActionBar 不是重叠内容。但是带有文本“属性必须有效..”的弹出窗口与所有内容重叠。

标签: java android android-layout popup popupwindow


【解决方案1】:

试试popup.setAttachedInDecor(true)

这会将弹出窗口附加到父窗口的装饰框架上,以避免与导航栏等屏幕装饰重叠。

您也可以尝试使用popup.setOverlapAnchor(false)

设置弹出窗口在显示为下拉菜单时是否应与其锚视图重叠。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    尝试减去操作和状态栏的高度:

    popup.setHeight(WindowManager.LayoutParams.WRAP_CONTENT - actionBarHeight - statusBarHeight);
    

    我的情况是,我使用 FrameLayout 父级以编程方式创建了弹出窗口。

    PopupWindow popupWindow = new PopupWindow(frameLayout, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT - actionBarHeight - statusBarHeight);
    

    【讨论】:

    • 如果导航抽屉打开,这种情况将无法解决问题
    【解决方案3】:

    试试这些!

    第一个隐藏键盘,因此顶部的内容将可见。

    public void hideSoftKeyboard(View view){
      InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
      imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
    

    然后,如果您使用滚动视图滚动到您想要显示弹出窗口的位置(EditText/Other View)!

    View targetView = findViewById(R.id.DESIRED_VIEW_ID);  
    targetView.getParent().requestChildFocus(targetView,targetView);
    

    参考:https://stackoverflow.com/a/31764551/5557479

    或其他参考:https://stackoverflow.com/a/35627860/5557479

    【讨论】:

    • 屏幕上有很多edittexts,所以隐藏键盘并不能解决这个问题
    • 然后第一次滚动到查看弹出窗口的位置,然后显示弹出窗口!
    【解决方案4】:

    尝试在拨打showPopup(...) 之前拨打editText.requestFocus(),如果有效,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多