我曾经有一个不使用ActionBar的Activity。布局为RelativeLayout
,宽度和高度与父级匹配。它允许用户使用onTouch
事件中的parts of this code拖动按钮:
MarginLayoutParams marginParams = new MarginLayoutParams(v.getLayoutParams());
int left = (int) event.getRawX() - (v.getWidth() / 2);
int top = (int) event.getRawY() - (v.getHeight());
marginParams.setMargins(left, top, 0, 0);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams);
v.setLayoutParams(layoutParams);
所有花花公子 - 按钮在手指正下方移动并正确放置在屏幕上的位置。然而,现在,我启用了ActionBar,突然点击时,按钮在手指下方移动〜<30像素。为了说明这种行为,这里是我曾经拥有的(左侧)和现在(右侧)发生的事情:
我认为这是因为ActionBar现在用它自己的高度取代所有东西。当然,我不希望这种情况发生,或至少纠正这一点,所以:
如何在不使用硬编码值的情况下根据ActionBar的实际大小在setMargins()
中移动展示位置?
如何防止ActionBar首先移动所有内容?换句话说,我如何确保我的按钮相对于ActionBar的底线以及手指指向的位置?
这就是我想要的:
答案 0 :(得分:0)
(我使用的方法是我的代码并且它可以工作。我将在这里告诉你相同的内容)
我认为setMargin()
在这里使用并不是一件好事。相反,您可以使用setX()
和setY()
方法。
每当从全屏活动切换到带有操作栏的活动时,都会遇到这样的问题。
您需要调整动作栏高度。不使用getLayoutParams()
,而是使用getLocationInWindow()
或getLocationOnScreen()
。由于getRawX()
和getRawY()
适用于视图的屏幕位置,因此应使用这些API。