刷新自定义视图布局位置

时间:2013-09-20 08:55:03

标签: android animation layout android-custom-view

我必须在我的应用中实现可滑动的菜单。用户应该能够通过点击它并向左/向右移动来显示/隐藏它。

为了实现这一点,我创建了扩展 FrameLayout 的自定义 SlidableFrameLayout 。 通过重写 onTouchEvent 方法,我计算幻灯片位置并调用

private void setLeftLayout(int left) {
    layout(left, getTop(), getRight(), getBottom());
}

更改 SlidableFrameLayout 的位置。一切正常,但是当我键盘显示(在聚焦EditText之后)时, SlidableFrameLayout 将其左值更改为0,因此如果菜单关闭,它将被打开。当我隐藏键盘时会发生同样的事情(通常,它会出现在阻止调用布局方法的所有操作中)。

我无法发明如何修复它。你可以帮帮我吗?如果需要任何其他信息,我会附上它。感谢

2 个答案:

答案 0 :(得分:1)

我认为您的问题与直接调用布局有关。当容器视图由于键盘显示/隐藏时更改大小onMeasure / onLayout将使用视图的默认边界调用。在你的情况下,我猜测左边界是0,所以每次你的窗口调整大小时都会调用0左边的布局。 相反,你可能想要使用像setTranslationX或scrollTo ..

这样的东西 祝你好运!

答案 1 :(得分:0)

结果,我改变了我的逻辑:

private void setLeftLayout(int left) {
    FrameLayout.LayoutParams params = getFrameLayoutParams();
    params.leftMargin = left;
    params.rightMargin = -left;
    requestLayout();
}

在我的情况下,view是FrameLayout的父级,所以我没有在方法的第一行添加任何条件。这种方法很好用。