XMLレイアウトにCardView
があり、プログラムでマージンを設定する必要があります(これは常にマージンが必要ないためです。いくつかの条件に基づいて、マージンを設定または削除します)。
ここに私がそれをした方法があります:
CardView.LayoutParams layoutParams = (CardView.LayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.setLayoutParams(layoutParams);
これはうまくいきました。 CardView
の下部に2dp
マージンが表示されます。しかし、私はこれを私のlogcatで取得します:
Java.lang.ClassCastException: Android.widget.LinearLayout$LayoutParams cannot be cast to Android.widget.FrameLayout$LayoutParams
そこで、次のようにCardView.LayoutParams
をFrameLayout.LayoutParams
に変更しました。
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.setLayoutParams(layoutParams);
それでも動作しますが、上記と同じエラーが発生します。
そこで、LinearLayout.LayoutParams
を使用するようにもう一度変更しました。
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.setLayoutParams(layoutParams);
これを行うと、エラーは発生しませんが、マージンは設定されません。
エラーを無視する必要がありますか?それはちょうど正しくないようです。
編集:
XMLでのCardView
は次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:orientation="horizontal"
Android:background="@Android:color/white"
Android:minHeight="@dimen/item_min_height"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.v7.widget.CardView
Android:id="@+id/cardViewAppointmentWeek"
app:cardElevation="2dp"
Android:layout_marginBottom="2dp"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<LinearLayout
Android:orientation="horizontal"
Android:background="?android:attr/selectableItemBackground"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
...
</LinearLayout>
</Android.support.v7.widget.CardView>
</LinearLayout>
あなたの場合、あなたはnotあなたのCardView
の親である誰かに特に興味があります。なぜなら、変更したいのはマージンだけだからです。すべての *LayoutParams
クラスはMarginLayoutParams
の直接/間接の子です。つまり、MarginLayoutParams
に簡単にキャストして、そのオブジェクトに変更を加えることができます。
ViewGroup.MarginLayoutParams layoutParams =
(ViewGroup.MarginLayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.requestLayout();
1)プログラムで表示されるようにCardviewパラメータを設定します
Carviewパラメータの設定
CardView cardView = new CardView(context);
LinearLayout.LayoutParams cardViewParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
cardView.setLayoutParams(cardViewParams)
2)カードビューの周りのマージンを表示するためのパラメーターを設定します
Cardviewマージンのパラメーターの設定
ViewGroup.MarginLayoutParams cardViewMarginParams = (ViewGroup.MarginLayoutParams) cardView.getLayoutParams();
cardViewMarginParams.setMargins(0, 30, 0, 30);
cardView.requestLayout(); //Dont forget this line
LayoutParamsを設定する
LinearLayout linearLayout =(LinearLayout)myCardView.findViewById(R.id.linearlayoutid); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT、LinearLayout.LayoutParams.WRAP_CONTENT); layoutParams.setMargins(30、20、30、0);