AdjustPan计算

时间:2019-04-01 09:01:42

标签: android keyboard

我想在屏幕上方一直显示一个视图(在每个设备中,即使打开了键盘)。问题是,在屏幕中间,我有一个EditText。在某些设备中,如果EditText获得焦点,键盘将打开并导致布局向上移动。我不想使用AdjustResize,它会导致背景图像拉伸。是否可以知道是否由于打开键盘而移动了布局?另外,该向上运动如何计算?我正在考虑在需要时重新定位视图

-首先尝试解决该问题:我已经尝试了协调器布局。我没有发现可以执行我想要的行为的行为,因此我尝试实现自己的行为。我在布局的底部添加了一个空间视图,每当该视图更改其位置时,我都会尝试向下平移顶视图。但是,即使layoutDependsOn()返回true,也不会调用onDependentViewChanged()来计算翻译。

-第二个尝试解决问题的方法:我在布局的底部再次添加了一个空间视图。另外,我添加了onGlobalLayoutListener以便跟踪键盘是否已打开。如果是这样,我尝试计算空间视图的位置并将其与以前的位置进行比较,以便向下移动顶视图。

-第三次尝试是使用AdjustNothing并由我自己亲自处理需要在键盘打开时重新定位自己的视图的翻译。这是唯一给我带来一些结果的尝试,但似乎有很多问题,将来,我相信这将导致比解决的问题更多的问题。

此外,我发现x,y,translationX,translationY在adjustPan中没有变化。计算正确位置的唯一方法是使用getLocationOnScreen()。但这在视图布局之后是可能的。我们可以在布局视图之前进行计算吗?

1 个答案:

答案 0 :(得分:0)

为了将来参考,为了计算AdjustPan模式下的向上平移像素,您必须执行以下代码。基本上,在AdjustPan中,我们根据需要推送尽可能多的布局,以使聚焦的EditText完全可见。

Z

此外,如果要计算视图的新位置,为了保持在同一屏幕位置,必须执行以下操作:

surf(X,Y,Z.')