【问题标题】:How to put equal space horizontally and vertically in cardview如何在cardview中水平和垂直放置相等的空间
【发布时间】:2023-03-24 14:06:01
【问题描述】:

我希望适配器中的 cardview 之间有一些相等的空间。

这样的空间怎么放?

这是我的 Xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.CardView
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    card_view:cardBackgroundColor="@color/White"
    card_view:cardCornerRadius="4dp"
    card_view:cardElevation="2dp"
    card_view:cardUseCompatPadding="true"
    card_view:contentPadding="4dp">
....

上面的代码是这样的..

有人可以帮帮我吗?

【问题讨论】:

  • 你应该给你的 cardLayout 边距:边距:"4dp" 并且注意高度必须小于边距,即如果margrin="4dp" 比elevation="2dp"。如果问题仍然存在,请将 cardview 放入框架布局中。
  • 你在使用 RecyclerView 来展示物品吗?

标签: android android-layout android-recyclerview android-cardview


【解决方案1】:

将 RecyclerView.Adapter 的 getItemViewType() 函数与由各自的边距组成的单独的视图保持器一起使用是可行的,但在绑定数据时会变得非常混乱,尤其是在处理 Play 商店应用等输入事件时(您在post) 因为每个视图在实现点击事件接口时都有自己的边距。

也就是说,我遇到的唯一理想、简洁的解决方案是充分利用 ItemDecoration 类,您可以在其中将偏移量(在我们的例子中为边距)相应地应用于每个膨胀的列表项,然后添加它到你的 RecyclerView。如文档中所述:

ItemDecoration 允许应用程序向适配器数据集中的特定项目视图添加特殊的绘图和布局偏移。这对于在项目、突出显示、视觉分组边界等之间绘制分隔线很有用。

可以在here找到一个示例实现。

【讨论】:

    【解决方案2】:

    CardView 包裹在LinearLayout 中,并将padding 属性设置为LinearLayout

    【讨论】:

      【解决方案3】:

      检查cheesesquare下面的代码使用方式(在你的情况下,在recycleview项目布局中使用它)

      <android.support.v7.widget.CardView 
                          android:layout_width="match_parent"
                          android:layout_height="wrap_content"
                          android:layout_margin="10dip">
      
                          <LinearLayout
                              android:id="@+id/relativeLayout1"
                              style="@style/Widget.CardContent"
                              android:layout_width="match_parent"
                              android:layout_height="wrap_content"
                              android:gravity="center_horizontal"
                              android:orientation="vertical">
                               // add your content here!
                          </LinearLayout>
                      </android.support.v7.widget.CardView>
      

      Widget.CardContent

      <style name="Widget.CardContent" parent="android:Widget">
              <item name="android:paddingLeft">10dp</item>
              <item name="android:paddingRight">10dp</item>
              <item name="android:paddingTop">12dp</item>
              <item name="android:paddingBottom">12dp</item>
              <item name="android:orientation">vertical</item>
          </style>
      

      【讨论】:

      • 这没有回答问题 - 我现在正在查看 Cheesesquare 示例应用程序,XML 布局显示每张卡片都是硬编码的(在每个 CardView 中应用了各自的边距),而不是通过 RecyclerView 渲染卡片。
      猜你喜欢
      • 2018-02-11
      • 2011-06-20
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多