Android LisPopUpWindow保持在视图右侧,没有空白

问题描述 投票:2回答:1

我正在尝试实现类似于菜单ListPopUpWindowtwitter之类的Popup。但随后它被卡在屏幕的右侧。任何帮助,将不胜感激谢谢。我的代码如下

PopUpWindow方法

 private void onListPopUp(View anchor) {

    ArrayList<Person> persoonItem = new ArrayList<>();
    persoonItem.add(new Person(R.drawable.ic_profile_logo, "Oladeji Abubakar", "[email protected]", ""));
    persoonItem.add(new Person(0, "", "", "Update Phone"));
    persoonItem.add(new Person(0, "", "", "Your Cards"));
    persoonItem.add(new Person(0, "", "", "Invite Friends"));
    persoonItem.add(new Person(0, "", "", "Logout"));

    ListPopupWindowAdapter mListPopUpWindowAdapter = new ListPopupWindowAdapter(getApplicationContext(), persoonItem);

    final ListPopupWindow pop = new ListPopupWindow(this);
    pop.setAdapter(mListPopUpWindowAdapter);
    pop.setAnchorView(anchor);
    pop.setModal(true);
    pop.setContentWidth(toolbar.getWidth() / 2);
    pop.setHeight(ListPopupWindow.WRAP_CONTENT);
    pop.setVerticalOffset(-105);
    //pop.setHorizontalOffset(100);
    //pop.setPromptPosition(20);
    //pop.setHorizontalOffset();
    pop.setPromptPosition(0);
    pop.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            pop.dismiss();
            Toast.makeText(TestActivity.this, "Clicked" + ((Person) parent.getItemAtPosition(position)).getOthers(), Toast.LENGTH_LONG).show();
        }
    });
    pop.show();
    WindowManager.LayoutParams wlp = new WindowManager.LayoutParams(toolbar.getWidth()/2, LinearLayout.LayoutParams.WRAP_CONTENT);
    wlp.gravity = Gravity.TOP | Gravity.END;
    wlp.horizontalMargin = -20;
    wlp.x = -20;
    View parentView = (View) pop.getListView().getParent();
    parentView.setLayoutParams(wlp);
}

和图像

Image

这是我要实现的目标

enter image description here

android android-popupwindow
1个回答
0
投票

您可以使用ListPopupWindow#setHorizontalOffsetListPopupWindow#setVerticalOffset来偏移ListPopupWindow。

令人困惑的是,如果锚点位于屏幕的右侧,则需要将ListPopupWindow的宽度值添加到水平偏移量,而垂直偏移量始终基于0。将ListPopupWindow锚定到右侧时,使用宽度以下的值作为水平偏移量似乎没有任何效果。另外,水平轴上的正数也指向右侧,因此我们将水平值反转。

以下代码将ListPopupWindow 5dp向下定位,并将5dp从位于右上角的锚点向左定位:

  final ListPopupWindow popupWindow = new ListPopupWindow(context);

  int widthPixels = convertDpToPixels(200, context);
  int horizontalOffset = -(widthPixels + convertDpToPixels(5, context));
  int verticaloffset = convertDpToPixels(5, context);

  popupWindow.setAnchorView(anchor);
  popupWindow.setWidth(widthPixels);
  popupWindow.setHorizontalOffset(horizontalOffset);
  popupWindow.setVerticalOffset(verticaloffset);
© www.soinside.com 2019 - 2024. All rights reserved.