我遇到了一个问题GridLayoutManger setSpanSizeLookup,当活动方向发生变化时,我在检查特定位置是否是某种类型的同时更改跨度计数,这对于方向更改非常有效,我唯一的问题是,我正在使用zxing库来做条形码扫描,每当button点击一个我打开zxing默认意图并从中检索日期,但是当zxing打开它时landscape,我的当前活动方向是portrait这给了我IllegalArgumentException布局管理抛出时只打开Xzing意图,崩溃日志是这样的,
java.lang.IllegalArgumentException: Item at position 0 requires 2 spans but GridLayoutManager has only 1 spans.
如果我旋转手机不会发生这个问题,只有当我启动时才会发生Xzing意图,我无法弄清楚我如何解决这个问题,因为它让我烦恼.这是我的spanSizeLookup-
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return adapter.getHolders().get(position).getLabelHolder() != null ? getResources().getInteger(R.integer.span) : 1;
}
});
Run Code Online (Sandbox Code Playgroud)
的span是在屏幕上的大小碱,因此它可以是1-2,2-3和3-4.我再说一遍这并没有给我任何方向改变的错误,只有当我打开zxing
PS 时发生错误,如果我打开zxing intent我的活动在landspace崩溃时不会发生.
编辑
它似乎只是启动zxing导致此问题的默认意图,我有一个它发布后的activity地方,并没有发生,作为我做的解决方法,是我创建了一个处理扫描延迟1第二次发射,好像我没有那样做,它会抛出相同的.landscapeexceptionactivitybarcodeintent …
我想要实现的目标:我希望在一个可滚动的布局(Recyclerviewwith GridlayoutManager)中有一个视图,其中包含tile(Views).拖放项目内部的项目RecyclerView应调整图标的位置并与其他元素交换.拖动开始时,上方的图标RecyclerView将更改为垃圾桶图标,将视图拖动到此图标将从中删除它RecyclerView.
我尝试了这个优秀的教程,但我没有找到一种方法如何处理拖动外部Recyclerview作为ItemTouchHelper.Callback仅使用Recycler.ViewHolder元素作为可能的目标.
interpolateOutOfBoundsScroll()如果视图移出边界,该方法会给出反馈,但只返回屏幕外的总大小,但没有坐标.此外,尝试将视图拖出Recyclerview总是导致切割视图通过其边界Recyclerview.
有谁知道我怎么能达到这个效果?
android drag-and-drop gridlayoutmanager android-recyclerview
我想在网格中的项目之间创建一个空格.这些物品都应具有相同的宽度/高度.
我尝试过的:
创建一个GridLayoutOffsetDecorator将偏移量应用于所有网格项:
class GridLayoutOffsetDecorator(var offset: Int) : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State?) {
super.getItemOffsets(outRect, view, parent, state)
outRect.set(offset, offset, offset, offset)
}
}
Run Code Online (Sandbox Code Playgroud)
具有偏移量8dp会16dp在项目之间创建空间.所以我们仍然需要8dp在外边缘应用填充:
<android.support.v7.widget.RecyclerView
android:id="@+id/productList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:padding="8dp" />
Run Code Online (Sandbox Code Playgroud)
结果是:
问题:项目大小不相同:
当您看到蓝线时,您会注意到高度略有不同.仅在填充Recyclerview之后才会出现此差异.这个填充似乎稍微调整了一些项目的大小.你们有这方面的经验吗?知道如何解决这个问题吗?
通过从项目中移除图像,高度差消失.这是图像的设置方式:
<SquareImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
app:imageResource="@{product.image}" />
Run Code Online (Sandbox Code Playgroud)
SquareImageView:
class SquareImageView : ImageView {
constructor(context: Context) : super(context)
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
constructor(context: Context, attributeSet: …Run Code Online (Sandbox Code Playgroud) android android-gridlayout gridlayoutmanager android-recyclerview
我有一个使用GridLayoutManager实现的RecyclerView.
根据数据集中的项目数量,spanCount介于1-4之间.项目宽度根据spanCount而变化.如果spancount为4或更高,则spanCount保留为4.
如果我有5个项目,则剩下1个项目(1行中有4个项目,剩下1个项目),位于屏幕左侧,单独排成一行.我希望它集中在一起.
我已经尝试以编程方式设置左侧项目的边距,并将recyclerView和各个项目包装在LinearLayouts中,并将重力设置为居中,以及设置recyclerView的重力.
示例项XML:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal"
>
<RelativeLayout
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:id="@+id/relative"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
示例RecyclerView XML
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议一个解决方案,或者给我一些工作材料.
提前致谢.
android margin centering gridlayoutmanager android-recyclerview
我正在使用StaggeredGridLayoutManager作为我的图片库.我已经设置好了setReverseLayout(true),所以图像从底部堆叠起来.
我面临的问题是在初始化app时,滚动点位于图库底部.当用户第一次启动应用程序时,我希望滚动位于库的顶部.
我已经尝试过使用scrollToPosition(下面的代码片段)但是滚动结果在画廊中间的某个地方结束,可能是因为在调用时图像没有正确加载scrollToPosition.
mLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
mLayoutManager.setReverseLayout(true);
mRecyclerView.setLayoutManager(mLayoutManager);
mImageList = ((MainActivity)getActivity()).getImages();
adapter = new ImageAdapter(getActivity(),mImageList);
mRecyclerView.setAdapter(adapter);
mRecyclerView.scrollToPosition(mImageList.size()-1);
Run Code Online (Sandbox Code Playgroud)
是否有正确的方法将滚动指向顶部而不是底部?
装饰RecyclerView以获得这样的外观和感觉的最佳和最简单的方法是什么?我正在开发一个旅行座位预订应用程序...我知道我可以使用gridlayout管理员的recyclerview来做这件事但是应该是什么步骤我不知道有一件事要注意每辆巴士有不同的座位安排
android android-gridlayout gridlayoutmanager recycler-adapter android-recyclerview
我使用recyclerview和grid layoutmanager我没有添加ItemDecoration
GridLayoutManager gridLayoutManager = new GridLayoutManager(TestResultActivity.this, 4, GridLayoutManager.HORIZONTAL, false);
gridLayoutManager.setAutoMeasureEnabled(true);
grid.setLayoutManager(gridLayoutManager);
Run Code Online (Sandbox Code Playgroud)
但是在两行之间,有一行,我不添加它.我想删除它.

使用 GridLayoutManager 填充回收器视图时遇到问题。
我需要完成第一行,完成后,转到第二行。我做了一个重新排序列表的算法,所以它可以正确显示,我可以在不做任何映射-取消映射的情况下点击该项目。这工作正常,但是当所有项目都可以在屏幕上显示而无需滚动时,就会出现问题。
例如,我有 4 个项目,我需要以 2 行网格布局(水平布局)显示它们。屏幕有 3 个项目的空间,所以我需要它们在第一行,而第 4 个项目应该是第二行中唯一的一个。
给你一张我默认拥有的图片:
0 2
1 3
Run Code Online (Sandbox Code Playgroud)
我需要的是:
0 1 2
3
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑: 根据要求,这是我正在使用的代码:
GridLayoutManager layoutManager = new GridLayoutManager(getContext(),2,LinearLayoutManager.HORIZONTAL, false);
Run Code Online (Sandbox Code Playgroud) 我需要在两行上创建一个带有GridLayoutManager的recyclerView,并且第一个元素要比其余元素大.结果应如下所示:

我设法实现了这个目标,但是以一种非传统的方式.在我的recyclerView适配器中,我使用不同的viewHolder作为第一个元素,一个更大的元素.那将是一个很好的解决方案,但第二个元素将低于第一个元素.所以我做了一个技巧,给予recyclerView一个与第一个元素相同的固定高度,这样第一个元素和第二个元素会重叠,我只会让第二个元素的可见性消失.
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0:
final View view = inflater.inflate(R.layout.big_item, parent, false);
return new BigViewHolder(view);
case 2:
final View view2 = inflater.inflate(R.layout.normal_item, parent, false);
return new NormalViewHolder(view2);
default:
return null;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (position == 1) {
holder.itemView.setVisibility(View.GONE);
}}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return 0;
} else return 2;
}
Run Code Online (Sandbox Code Playgroud)
但我并不特别喜欢这种方法.有人对此有更好的想法吗?
android android-layout gridlayoutmanager android-recyclerview