以编程方式在 cardview 中设置边距

Set margins in cardview programmatically

这是代码

CardView.LayoutParams layoutParams = new CardView.LayoutParams(
                CardView.LayoutParams.WRAP_CONTENT, CardView.LayoutParams.WRAP_CONTENT);
        layoutParams.setMargins(100,100,100,100);
        CardView cv = new CardView(this);
        cv.setLayoutParams(layoutParams);

无论何时何地,从 xml 它的工作-

android:layout_marginLeft="100dp"

可能是什么原因?我是不是漏掉了什么!

我需要 cardview 高度的余量

谢谢

如果我理解正确,您是在尝试避免裁剪 CardView 的高程阴影。

不要操纵边距,尝试在初始化 CardView 时设置 cardUseCompatPadding to true and if you are changing elevation dynamically, you should call setMaxCardElevation(float)。 (您可以通过 xml 以及编程方式设置)。

CardView 设置最大海拔让它占据 space 以获得更大的阴影,但它也会添加此 space 以获得较低的海拔。


顺便说一句,如果你想为某些视图设置LayoutParams,你需要使用这些,它们对应于视图的父

例子:LinearLayout里面有一个TextView

TextView textView = (TextView) findViewById(R.id.text_view);

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

textView.setLayoutParams(layoutParams);

您可以在卡片视图中添加高度填充

CardView card = new CardView(this);

LinearLayout.LayoutParams params =
    new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                                  LinearLayout.LayoutParams.WRAP_CONTENT);

card.setLayoutParams(params);
card.setContentPadding(2, 1, 2, 1);
card.setMaxCardElevation(5);
card.setCardElevation(9);

您可以根据自己的需要尝试此块。

parentCardView.setLayoutParams(new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.WRAP_CONTENT, (int) Utility.pxFromDp(getActivity(), 300)));

                ViewGroup.MarginLayoutParams layoutParams =
                        (ViewGroup.MarginLayoutParams) binding.parentCard.getLayoutParams();
                layoutParams.setMargins(16, 0, 16, 0);
                binding.parentCard.requestLayout();

这将设置布局高度、宽度,然后将边距值放在卡片视图上。