以编程方式在 RecyclerView 上设置边距
Set Margin on RecyclerView programmatically
我需要以编程方式在 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
.
不存在该方法
如有任何帮助,我们将不胜感激。
试试这个。您可以参考this了解更多信息。
ViewGroup.MarginLayoutParams marginLayoutParams = new ViewGroup.MarginLayoutParams(mRecyclerView.getLayoutParams());
marginLayoutParams.setMargins(0, 10, 0, 10);
mRecyclerView.setLayoutParams(marginLayoutParams);
您需要使用 MarginLayoutParams 的新对象
final FrameLayout.MarginLayoutParams marginLayoutParams = new
FrameLayout.MarginLayoutParams(rvContacts.getLayoutParams());
marginLayoutParams.leftMargin = left;
marginLayoutParams.topMargin = top;
marginLayoutParams.rightMargin = right;
marginLayoutParams.bottomMargin = bottom;
recyclerView.setLayoutParams(marginLayoutParams);
recyclerView.requestLayout();
对我来说,recyclerview
的父级是 constraintLayout
、
val margins = (rv.layoutParams as ConstraintLayout.LayoutParams).apply {
leftMargin = 0
rightMargin = 0
}
rv.layoutParams = margins
否则会出现转换错误,viewGroup.LayoutParams不能转换为COnstarintLayout.LayoutParams
我也面临这种问题,使用下面的代码来处理recyclerview的保证金问题。
ViewGroup.MarginLayoutParams marginLayoutParams=
(ViewGroup.MarginLayoutParams) recyclerView.getLayoutParams();
// here i try to set only top margin, Get dimension from dimension file.
int topMargin = getResources()
.getDimensionPixelSize(R.dimen.top_margin);
marginLayoutParams.setMargins(marginLayoutParams.getMarginStart(),
topMargin, marginLayoutParams.getMarginEnd(), marginLayoutParams.bottomMargin);
recyclerView.setLayoutParams(marginLayoutParams);
在我的案例中,使用 clipToPadding="false" 填充就可以了。 [科特林]
所以我在 xml 中将 android:clipToPadding="false"
添加到我的 RecyclerView。
也可以通过编程方式完成。
然后刚刚使用:
recyclerView.setPadding(10, 0, 0, someSpace)
someSpace
是 dp 变量,以备不时之需。
resources.getDimension(R.dimen.some_space).toInt()
P.S 不要忘记在维度文件中创建 some_space :)
我需要以编程方式在 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
.
如有任何帮助,我们将不胜感激。
试试这个。您可以参考this了解更多信息。
ViewGroup.MarginLayoutParams marginLayoutParams = new ViewGroup.MarginLayoutParams(mRecyclerView.getLayoutParams());
marginLayoutParams.setMargins(0, 10, 0, 10);
mRecyclerView.setLayoutParams(marginLayoutParams);
您需要使用 MarginLayoutParams 的新对象
final FrameLayout.MarginLayoutParams marginLayoutParams = new
FrameLayout.MarginLayoutParams(rvContacts.getLayoutParams());
marginLayoutParams.leftMargin = left;
marginLayoutParams.topMargin = top;
marginLayoutParams.rightMargin = right;
marginLayoutParams.bottomMargin = bottom;
recyclerView.setLayoutParams(marginLayoutParams);
recyclerView.requestLayout();
对我来说,recyclerview
的父级是 constraintLayout
、
val margins = (rv.layoutParams as ConstraintLayout.LayoutParams).apply {
leftMargin = 0
rightMargin = 0
}
rv.layoutParams = margins
否则会出现转换错误,viewGroup.LayoutParams不能转换为COnstarintLayout.LayoutParams
我也面临这种问题,使用下面的代码来处理recyclerview的保证金问题。
ViewGroup.MarginLayoutParams marginLayoutParams=
(ViewGroup.MarginLayoutParams) recyclerView.getLayoutParams();
// here i try to set only top margin, Get dimension from dimension file.
int topMargin = getResources()
.getDimensionPixelSize(R.dimen.top_margin);
marginLayoutParams.setMargins(marginLayoutParams.getMarginStart(),
topMargin, marginLayoutParams.getMarginEnd(), marginLayoutParams.bottomMargin);
recyclerView.setLayoutParams(marginLayoutParams);
在我的案例中,使用 clipToPadding="false" 填充就可以了。 [科特林]
所以我在 xml 中将 android:clipToPadding="false"
添加到我的 RecyclerView。
也可以通过编程方式完成。
然后刚刚使用:
recyclerView.setPadding(10, 0, 0, someSpace)
someSpace
是 dp 变量,以备不时之需。
resources.getDimension(R.dimen.some_space).toInt()
P.S 不要忘记在维度文件中创建 some_space :)