Нижний лист внутри всплывающей подсказки не работает. Это всплывающее окно отображается за нижним листом. - PullRequest
1 голос
/ 18 апреля 2020

У меня есть нижний лист. Я загружаю всплывающее окно, но оно не отображается на нижнем листе. Это всплывающее окно отображается за нижним листом

    CustomTextView textView = (CustomTextView) layout.findViewById(R.id.info_disc);
    textView.setText(text, TextView.BufferType.SPANNABLE);
    final PopupWindow popup = new PopupWindow(context);
    popup.setContentView(layout);
    DisplayMetrics displayMetrics = new DisplayMetrics();
    context.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    int width = displayMetrics.widthPixels;
    popup.setWidth((int) (width - (view.getX() + view.getWidth() + ViewUtils.convertDpToPixel(12, context))));
    popup.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
    popup.setFocusable(true);
    popup.setBackgroundDrawable(new BitmapDrawable());
    Rect p = locateView(view);
    popup.showAtLocation(layout, Gravity.TOP | Gravity.LEFT, p.right, p.top + 15);

1 Ответ

1 голос
/ 18 апреля 2020

В этом случае нижний лист представляет собой BottomSheetDialogFragment, а BottomSheetDialog, которым он управляет, действительно является Dialog; совершенно отдельное окно от окна Activity. PopupWindow ассоциируется с неправильным окном, поэтому он отображается за BottomSheetDialog.

. View, переданный PopupWindow show*() методам, используется для определения того, какое окно связать PopupWindow с. В данном фрагменте:

popup.showAtLocation(layout, Gravity.TOP | Gravity.LEFT, p.right, p.top + 15);

layout - это View, раздутый, чтобы действовать как содержимое PopupWindow, и поэтому он еще не прикреплен ни к какому окну, поэтому он не знает, покажите над BottomSheetDialog.

Исправление состоит в том, чтобы просто передать showAtLocation() a View, любой View, который в данный момент присоединен к BottomSheetDialog, когда выполняется вызов:

popup.showAtLocation(view, Gravity.TOP | Gravity.LEFT, p.right, p.top + 15);
...