【问题标题】:Set margins in cardview programmatically以编程方式在cardview中设置边距
【发布时间】:2023-04-01 04:05:01
【问题描述】:

这里是代码

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"

可能是什么原因?我错过了什么吗!

我需要用于提升卡片视图的边距

谢谢

【问题讨论】:

    标签: android android-layout android-cardview


    【解决方案1】:

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

    尝试将cardUseCompatPadding 设置为true 而不是操纵边距,并且如果您正在动态更改高度,您应该在CardView 初始化时调用setMaxCardElevation(float)。 (您既可以通过 xml 设置,也可以通过编程方式设置)。

    为CardView 设置最大高度让它占用空间来产生更大的阴影,但它也会添加这个空间来降低高度。


    顺便说一句,如果你想为某个视图设置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);
    

    【讨论】:

    • 这段代码甚至不能编译 CardViews,它基于 FrameLayout——与 LinearLayout 完全不同。
    • @ScottBiggs 在复制和粘贴代码之前尝试阅读并理解整个答案。
    【解决方案2】:

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

    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);
    

    【讨论】:

      【解决方案3】:

      您可以根据自己的要求尝试这个块。

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

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

      【讨论】:

      • 当你回答时,请在此 Utility.pxFromDp 方法中提供完整的代码 sn-p 方法丢失
      • 哦,不好意思,很抱歉给您带来不便,目前我没有这个 Util 类可用,您可以在那里尝试不同的 Integer 值来观察效果,​​或者检查一些 pixelToDp 方法以使 android 设备移动上..
      • ViewGroup.MarginLayoutParams cardViewMarginParams = (ViewGroup.MarginLayoutParams) holder.cardView.getLayoutParams(); cardViewMarginParams.setMargins(12, 12, 12, 110); holder.cardView.requestLayout(); //不要忘记这一行 这行运行良好
      猜你喜欢
      • 1970-01-01
      • 2018-11-14
      • 2011-01-29
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 2014-11-26
      • 1970-01-01
      相关资源
      最近更新 更多