以编程方式在 RecyclerView 上设置边距

新手上路,请多包涵

我需要以编程方式在 RecyclerView 上设置上边距,但出现此异常:

java.lang.RuntimeException: Unable to resume activity java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.support.v7.widget.RecyclerView$LayoutParams

这是我的代码:

 RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams)recyclerView.getLayoutParams();
int marginTopDp = (int)getResources().getDimension(R.dimen.margin);
int marginTopPx = (int) (marginTopDp * getResources().getDisplayMetrics().density + 0.5f);
layoutParams.setMargins(0, marginTopPx, 0, 0);
recyclerView.setLayoutParams(layoutParams);

如果我使用 ViewGroup.LayoutParams layoutParams = recyclerView.getLayoutParams 如堆栈跟踪所示,我不能再调用 setMargin 因为该方法不存在 ViewGroup.LayoutParams

任何帮助,将不胜感激。

原文由 VIN 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 612
2 个回答

试试这个。您可以参考 以获取更多信息。

 ViewGroup.MarginLayoutParams marginLayoutParams = new ViewGroup.MarginLayoutParams(mRecyclerView.getLayoutParams());
marginLayoutParams.setMargins(0, 10, 0, 10);
mRecyclerView.setLayoutParams(marginLayoutParams);

原文由 Bharat 发布,翻译遵循 CC BY-SA 4.0 许可协议

对我来说, recyclerview 的父母是 constraintLayout

         val margins = (rv.layoutParams as ConstraintLayout.LayoutParams).apply {
        leftMargin = 0
        rightMargin = 0
    }
    rv.layoutParams = margins

否则会出现转换错误,无法将 viewGroup.LayoutParams 转换为 COnstarintLayout.LayoutParams

原文由 Xianwei 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题