在Android中定位相对于ActionBar的项目

时间:2012-11-29 10:26:20

标签: android android-layout android-actionbar android-view

我曾经有一个不使用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的底线以及手指指向的位置?

这就是我想要的:

1 个答案:

答案 0 :(得分:0)

(我使用的方法是我的代码并且它可以工作。我将在这里告诉你相同的内容)

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

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