web-dev-qa-db-ja.com

プログラムで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を使用すると、ViewGroup.LayoutParamsにはそのメソッドが存在しないため、setMarginを呼び出すことができなくなります。

任意の助けいただければ幸いです。

9
VIN

これを試してみてください。詳細は this を参照してください。

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

MargingLayoutParamsの新しいオブジェクトを使用する必要があります

    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();
1
Daniil Pavenko

私にとって、recyclerviewの親はconstraintLayoutであり、

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

キャストエラーが発生する、viewGroup.LayoutParamsをCOnstarintLayout.LayoutParamsにキャストできない

0
Xianwei