问题标签 [gridlayoutmanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
33 回答
286251 浏览

android - Android Recyclerview GridLayoutManager 列间距

如何使用 GridLayoutManager 设置 RecyclerView 的列间距?在我的布局中设置边距/填充无效。

0 投票
1 回答
674 浏览

android - 创建具有两个不同列的 GridView

我正在尝试创建一个具有两种不同类型项目的 GridView。

前几项将占据一整行。随着用户继续滚动,每行将开始显示两个项目,如下所示:

http://imgur.com/YFSUxVI

我怎样才能实现这种类型的网格视图?使用 iOS 的 UICollectionView 很容易做到这一点,但是我在 Android 上没有很多运气。任何帮助将不胜感激!

0 投票
1 回答
2554 浏览

android - 如何防止 RecyclerView 移动项目?

我正在尝试实现一个布局,它基本上是一个相同大小的项目网格。

这些项目是有序的,上面有日期,就像在日历中一样,所以你知道为什么我不能在每次滚动时随机排序它们。

我的问题是:有没有办法防止这种行为,或者我应该坚持使用旧的 GridLayout?

我问这个也是因为我最初认为新的 RecyclerView 仅用于随机排序的项目,例如新闻文章或帖子。这可以解释控制其行为的困难。

然而,经过一些阅读和网络搜索,现在在我看来,如果我错了,请纠正我,RecyclerView 是 ListView、GridLayout 和其他几个由其 LayoutManagers 实现的升级版本。

有人可以帮我弄这个吗?

谢谢!

编辑:这是我的适配器:

0 投票
1 回答
884 浏览

python - 为 Tkinter 小部件启用“setgrid”选项

我正在使用gridTkinter 的几何管理器在第 2 列中生成一个带有水平滚动文本的表格。我尝试创建一个Listbox位于第 2 列(作为整个框架的子项)并跨越所有行的小部件。这似乎很有希望,直到 Listbox 中的文本行明显与父网格的行不对齐。我一直在徒劳地寻找一种方法来填充列表框中的每一行文本以使行匹配;但即使这是可能的,我更喜欢更通用、不那么笨拙的解决方案。

我最近偶然发现了对 Gridded Geometry Management 的描述,它暗示了一个小部件的 setgrid 选项。它声称完全符合我的要求:即“[确定]此小部件是否控制其顶级窗口的大小调整网格。” 我尝试在我的Listbox小部件中启用此选项,但无济于事。我是否以某种方式误解了 setgrid 的目的/用法?

(为了查看下面代码的问题,请使用Select FileSelect Folder按钮将多个音频文件加载到文件列表中。)

0 投票
2 回答
2795 浏览

android - RecyclerView 预测项目动画不起作用(出现)

我有一个带有 GridLayoutManager 的 RecyclerView(支持 lib v7)。我更新适配器并制作 notifyItemMoved。如果项目源位置在屏幕上并且目标位置也在屏幕上 - 播放“移动动画”。如果项目位于屏幕外的位置(位置 1000 或任何其他远离视口的位置)并移入视口,它将显示“动画淡入淡出”。

看起来预测项目动画不起作用,尽管事实上 supportsPredictiveItemAnimations() 返回 true。难道我做错了什么?我应该重写一些方法来启用它吗?

我正在阅读 RecyclerView 的源代码,在 dispatchLayout 方法的 javadoc 中这样写:

  • PERSISTENT 视图被移动({@link ItemAnimator#animateMove(ViewHolder, int, int, int, int)})
  • REMOVED 视图被移除 ({@link ItemAnimator#animateRemove(ViewHolder)})
  • 添加了视图({@link ItemAnimator#animateAdd(ViewHolder)})
  • 消失的视图被移出屏幕
  • 出现的视图在屏幕上移动

尽管如此,ItemAnimator 并不区分 ADDED 和 APPEARING。是否可以修复预测动画或至少使 APPEARING 动画看起来像“从屏幕动画外部移动”而留下 ADDED 动画?

0 投票
1 回答
82 浏览

java - 将容器放入网格布局中

我对 Java GUI 编程比较陌生,我想使用网格布局并在该网格布局中放置一个容器。我不太确定该怎么做,但这是我尝试过的,但没有奏效:

我知道这是错误的,但我希望有人能帮助我。谢谢!

0 投票
3 回答
5091 浏览

android - 带有 GridLayoutManager 和 Picasso 的 RecyclerView 显示错误的图像

更新#1

添加 hasStableIds(true) 并将 Picasso 更新到 2.5.2 版。它不能解决问题。

再生产:

RecyclerView 与 GridLayoutManager (spanCount = 3)。列表项是 CardViews,里面有 ImageView。

当所有项目都不适合屏幕时,对一项调用 notifyItemChanged 会导致多次调用 onBindViewHolder()。一个调用是来自 notifyItemChanged 的​​其他位置,用于在屏幕上不可见的项目。

问题:

有时,传递给 notifyItemChanged 位置的项目加载了属于不在屏幕上的项目的图像(很可能是由于视图持有者的回收 - 尽管我会假设如果项目保持原位,那么传递的视图持有者将是相同的)。

我在这里找到了 Jake 关于调用 load() 的其他问题的评论,即使文件/uri 为空。图像被加载到这里的每个 onBindViewHolder 上。

简单的示例应用程序:

点击一个项目调用 notifyItemChanged 参数等于该项目的位置。

代码:

0 投票
0 回答
924 浏览

android - 具有固定大小的元素和滚动的 Android GridLayoutManager

我正在尝试为我正在为 android 开发的扫雷游戏实现雷区。我正在使用 recyclerview 并尝试了 GridLayoutManager,但是我无法同时水平和垂直滚动,因为内部视图已调整大小。

我也看过FixedGridLayoutManager,但是当屏幕上的视图太多时,我可以滚动到左右边界并且动画停止工作。

如果我想扩展 GridLayoutManager 以启用固定大小的视图和水平 + 垂直滚动,我应该从哪里开始?

0 投票
3 回答
4602 浏览

android - 在 Picasso.load() 之后更改回收器视图中的 ImageView 大小?

我有:

  • 带有 GridLayoutManager 的回收视图
  • 包含在 Framelayout 中的 ImageView(高度为 wrap_content 和宽度为 match_parent)的网格项目布局,因此图像底部 | 中心水平对齐
  • Picasso 从网络异步加载图像到 ImageView

当前情况:图片加载到imageView中,但是imageview的大小是回收的grid item的imageview的大小。

我想实现的目标:将图像加载到 imageview 后,在运行时调整 imageview 的大小(重绘)。

我试过的:

  1. notifyItemChanged() - 可以解决问题(至少在理论上),但我无法检查当前网格项的视图是否处于布局状态,所以我的应用程序因 IllegalStateException 而崩溃
  2. 用 Callback 监听 Picasso 的负载,onSuccess() 检查 imageview 的可绘制纵横比并尝试使用 requestLayout() 调整 imageview 本身的大小。不工作。(好吧,它起作用了,但只有当有动画或触发布局重绘的东西时。如果什么都没有,那么图像视图不会重绘。)
  3. 用 Callback 监听 Picasso 的负载,然后 onSuccess() 启动一个动画,为 imageview 的 alpha 设置动画。这将触发重绘。但这有时有时不起作用(我不知道为什么)。
0 投票
4 回答
52467 浏览

android - 使用 GridLayoutManager 在 RecyclerView 中拖放项目

我想要实现的目标:拥有一个带有 GridLayoutManager 的 RecyclerView,它支持拖放,并在拖动时重新排列项目。

旁注:第一次使用拖放开发任何东西。

有很多关于如何使用 ListView 实现此功能的主题,例如:https ://raw.githubusercontent.com/btownrippleman/FurthestProgress/master/FurthestProgress/src/com/anappforthat/android/languagelineup/DynamicListView.java

然而,这些示例通常包含大量代码,用于创建拖动视图的位图,感觉应该可以使用View.startDrag(...)RecyclerView来实现相同的结果notifyItemAdded(),因为它们提供了重新排列动画。notifyItemMoved()notifyItemRemoved()

所以我玩了一些并想出了这个:

这段代码的工作,我得到了交换,但非常不稳定/不稳定,有时当它刷新时,整个网格被重新排列回原始顺序或随机的东西。无论如何,上面的代码只是我的第一次快速尝试,我真正更感兴趣的是是否有一些标准/最佳实践方法可以使用 ReyclerView 进行拖放,或者解决它的正确方法是否仍然相同多年来一直用于 ListViews?