2

我曾经有一个不使用 ActionBar 的 Activity。布局是一个RelativeLayout宽度和高度仅与父级匹配的布局。它允许用户在事件中使用以下代码的一部分拖动按钮onTouch

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 现在用它自己的高度取代了所有东西。当然,我不希望这种情况发生,或者至少纠正这种情况,所以:

  • 如何在setMargins()不使用硬编码值的情况下根据 ActionBar 的实际大小移动位置?

  • 我怎样才能防止 ActionBar 首先改变一切?换句话说,我如何确保我的按钮相对于 ActionBar 的底线和手指指向的位置?

这就是我要的:

4

1 回答 1

0

(我使用的方法是我的代码并且它有效。我将在这里告诉你同样的)

  • 我认为setMargin()在这里使用并不是一件聪明的事情。相反,您可以使用setX()andsetY()方法。

  • 每当从全屏活动切换到带有操作栏的活动时,就会遇到这样的问题。您将需要调整操作栏的高度。而不是使用getLayoutParams(),使用 getLocationInWindow()getLocationOnScreen()。由于getRawX()getRawY()使用视图的屏幕位置,因此应该使用这些 API。

于 2013-04-16T04:45:21.563 回答