我终于成功将 Android 支持库中的 VerticalGridView 添加到我的项目中。 现在的问题是网格水平和垂直滚动!
这是我的来源:
<android.support.v17.leanback.widget.VerticalGridView
android:id="@+id/my_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" />
和java代码:
mRecyclerView = (VerticalGridView) rootView.findViewById(R.id.my_recycler_view);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setNumColumns(4);
mRecyclerView.setVerticalMargin(24);
我已经找到了解决这个问题的方法。您只需将
android.support.v7.widget.GridLayoutManager
设置为 VerticalGridView
的布局管理器,如下所示(请注意,列数在构造函数中传递):
mRecyclerView = (VerticalGridView) rootView.findViewById(R.id.my_recycler_view);
mRecyclerView.setLayoutManager(new GridLayoutManager(context, 4));
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setVerticalMargin(24);
无论你选择哪一个,你都可以拿着这个列表双向滚动,感觉就像可以在屏幕上移动一样。必须有一种方法可以禁用一个方向的滚动
有办法处理吗?
在使用扩展 VerticalGridSupportFragment 的片段时,我遇到了同样的问题。解决方案是使用自定义 VerticalGridPresenter,并在此应用自定义 GridLayoutManager。
在你的片段中:
VerticalGridPresenter gridPresenter = new CustomVerticalGridPresenter(FocusHighlight.ZOOM_FACTOR_SMALL, false);
CustomVerticalGridPresenter 类:
public class CustomVerticalGridPresenter extends VerticalGridPresenter {
public CustomVerticalGridPresenter(int focusZoomFactor, boolean useFocusDimmer) {
super(focusZoomFactor, useFocusDimmer);
}
@SuppressLint("ClickableViewAccessibility")
@Override
protected ViewHolder createGridViewHolder(ViewGroup parent) {
ViewHolder vh = super.createGridViewHolder(parent);
VerticalGridView gridView = vh.getGridView();
// Apply our custom LayoutManager that disables horizontal scrolling
NoHorizontalScrollGridLayoutManager layoutManager = new NoHorizontalScrollGridLayoutManager(
parent.getContext(), getNumberOfColumns());
gridView.setLayoutManager(layoutManager);
return vh;
}
}
NoHorizontalScrollGridLayoutManager 类:
public class NoHorizontalScrollGridLayoutManager extends GridLayoutManager {
public NoHorizontalScrollGridLayoutManager(Context context, int spanCount) {
super(context, spanCount);
}
@Override
public boolean canScrollHorizontally() {
// Return false to prevent horizontal scrolling
return false;
}
@Override
public boolean canScrollVertically() {
// Allow vertical scrolling
return true;
}
}
在leanback lib中有两个类:1.VerticalGridView 2.HorizontalGridView 你可以使用 HorizontalGridView 进行水平滚动