web-dev-qa-db-ja.com

プログラムでマージンをCardViewに設定する

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.LayoutParamsFrameLayout.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();

29
azizbekian

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
4
fritz-playmaker
  1. LinearlayoutIdをカードビューの子に設定します
  2. FindViewByIdからlinearlayoutを見つけます。
  3. 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);

0
redAllocator