У меня есть ImageView, который открывает PopupMenu при нажатии. Как настроить отображение PopupMenu в определенном месте? PopupMenu будет служить выпадающим меню, и я бы хотел, чтобы верхний правый угол PopupMenu находился там, где щелкнул пользователь. См. Изображения ниже для иллюстрации:
Что у меня есть сейчас:
Что я хочу:
Соответствующий код:
mNavViewDropDown= navViewHeader.findViewById(R.id.navview_header_expand);
mNavViewDropDown.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu popup = new PopupMenu(getContext(), mNavViewDropDown);
//Inflating the Popup using xml file
popup.getMenuInflater()
.inflate(R.menu.menu_navview_header_, popup.getMenu());
//registering popup with OnMenuItemClickListener
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(
getContext(),
"You Clicked : " + item.getTitle(),
Toast.LENGTH_SHORT
).show();
return true;
}
});
popup.show(); //showing popup menu
}
});
Вы можете установить плотность всплывающего меню.
popup.setGravity(Gravity.LEFT);
При этом то, что вы делаете, больше похоже на взлом. Нет никакой гарантии, что он появится слева. Вы должны либо использовать expandableListView, либо создать собственное расширяемое представление. Попробуйте эту библиотеку: https://github.com/AAkira/ExpandableLayout. Это простой способ показать расширяемое представление.
Поэтому вместо того, чтобы использовать это хакерское выпадающее всплывающее меню, я понял, что есть гораздо лучший инструмент, уже созданный именно для этого:
https://developer.android.com/guide/topics/ui/controls/spinner#java
используйте раскрывающийся список вместо всплывающего меню