我在listview适配器中为每个项目都有一个弹出菜单。屏幕左边会弹出菜单,如何将其更改为右侧
private void showPopupMenu(View v, final App app) {
PopupMenu popupMenu = new PopupMenu(context, v);
popupMenu.getMenuInflater().inflate(R.menu.quick_action_menu,
popupMenu.getMenu());
popupMenu
.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
...
答案 0 :(得分:7)
比一次更好=)这是我的决定,允许你将PopupMenu设置为指定的坐标。代码不是很好但是有效。
public void show(Activity activity, float x, float y)
{
final ViewGroup root = (ViewGroup) activity.getWindow().getDecorView().findViewById(android.R.id.content);
final View view = new View(context);
view.setLayoutParams(new ViewGroup.LayoutParams(1, 1));
view.setBackgroundColor(Color.TRANSPARENT);
root.addView(view);
view.setX(x);
view.setY(y);
PopupMenu popupMenu = new PopupMenu(context, view, Gravity.CENTER);
popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener()
{
@Override
public void onDismiss(PopupMenu menu)
{
root.removeView(view);
}
});
popupMenu.show();
}
答案 1 :(得分:2)
您可以使用以下属性更改PopupMenu的位置: 重力, dropDownHorizontalOffset 和 dropDownVerticalOffset
首先将重力设置为Gravity.END
popup.setGravity(Gravity.END);
然后通过创建样式
来更改下拉列表偏移量<style name="MyPopupMenu" parent="@style/Widget.AppCompat.PopupMenu">
<item name="android:dropDownHorizontalOffset">-4dp</item>
<item name="android:dropDownVerticalOffset">4dp</item>
</style>
如果要重叠锚视图,请使用
parent="@style/Widget.AppCompat.PopupMenu.Overflow"
最后将MyPopupMenu应用于您的主题
<item name="popupMenuStyle">@style/MyPopupMenu</item>
答案 2 :(得分:0)
你做不到。 As docs say:
PopupMenu在模式弹出窗口中显示一个菜单,锚定到a 视图。如果有空间,则弹出窗口将显示在锚点视图下方 如果没有,就在它之上。如果IME可见,则弹出窗口不会 重叠它直到它被触摸。触摸弹出窗口外面会 解雇它。
您可能想尝试使用PopupWindow,这样可以进行此类定位。
答案 3 :(得分:0)
您可以将ListPopupWindow用于show List弹出菜单。有设置偏移的功能(ListPopupWindow)。
或者您可以使用此function
明确设置PopupWindow的偏移量答案 4 :(得分:0)
您可以改用PopupWindow。那里有很多定位选项:
popupWindow.showAsDropDown(View parent)
将显示在父视图下方popupWindow.showAsDropDown(View anchor, int xoff, int yoff)
将显示在父视图的下方,但也会应用偏移量popupWindow.showAsDropDown(View anchor, int xoff, int yoff, int gravity)
像以前一样,但也很引力popupWindow.showAtLocation(View parent, int gravity, int x, int y)
在任何绝对位置弹出BR