我有一个带有RecyclerView的布局(简单的垂直列表)。当列表向上滚动时,一些视图(包括Recyclerview)随之移动并粘在屏幕顶部。向下滚动,它们向下移动直到它们返回到初始位置。他们的translationY与列表向上或向下滚动的数量有关。
问题是,我有一个静态的横向布局,所以旋转会为布局做各种奇怪的事情。我该如何防止这种情况?换句话说,如何将视图保留在setTranslationY范围内?
布局:
<LinearLayout
android:id="@+id/rootLayout"
...
>
<Some other stuff/>
<RelativeLayout
android:id="@+id/containerLayout"
>
... contains things ...
</RelativeLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
/>
</LinearLayout>
代码:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
scrollY = scrollY - dy // float, to keep the total vertical scroll amount
final int maxTop = rootLayout.getTop() // Maximum translationY allowed, sticky to top
containerLayout.setTranslationY(maxTop > scrollY ? maxTop : scrollY) // if it reached the top, stay there
recyclerView.setTranslationY(maxTop > scrollY ? maxTop : scrollY) // the same
}
这很好用。问题是当我旋转设备时,由于回收者的视图行为,布局会移动到古怪的位置或者完全脱离屏幕。
任何帮助都会受到赞赏,我在这里失去了理智。