java - 无法在 Cardview 中正确嵌套 GridView

标签 java android-layout gridview android-recyclerview android-cardview

我使用 RecyclerView 来呈现 CardView 。这个 CardView 有 2 个 TextView 和 1 个 GridView ,GridView 将 CardView (我们称之为 inside_card )作为它的 subview 。现在我无法更改 inside_card 的高度。下面给出的是我想要实现的目标(图 A)和我得到的(图 B)。 Reference Image

下面是我的布局。 activity_main.xml 包含 RecylerView


    <?xml version="1.0" encoding="utf-8"?>
    <androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".Activities.MainActivity">
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </androidx.recyclerview.widget.RecyclerView>  

    </androidx.appcompat.widget.LinearLayoutCompat>

activity_card.xml 包含要在 RecyclerView 内呈现的布局


    <?xml version="1.0" encoding="utf-8"?>
    <androidx.appcompat.widget.LinearLayoutCompat
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    <androidx.cardview.widget.CardView


        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        app:cardBackgroundColor="#AAA"

        android:id="@+id/card_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        card_view:cardCornerRadius="4dp"
        android:layout_margin="8dp"
        android:requiresFadingEdge="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:orientation="vertical"
            android:layout_height="wrap_content"
            >
            <TextView
                android:id="@+id/proffName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="ProfessorName"
                android:textAlignment="center"
                android:gravity="center_horizontal">
            </TextView>
        <TextView
            android:id="@+id/subjectCode"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SemesterName"
            android:textAlignment="center"
            android:gravity="center_horizontal">
        </TextView>

            <GridView
                android:layout_gravity="center"
                android:id="@+id/unitsGrid"
                android:layout_width="match_parent"
                android:layout_height="80dp"
                android:layout_weight="1"
                android:layout_margin="6dp"
                android:horizontalSpacing="2dp"
                android:numColumns="2"></GridView>
        </LinearLayout>
    </androidx.cardview.widget.CardView>
    </androidx.appcompat.widget.LinearLayoutCompat>

inside_card.xml 包含要在 GridView 内呈现的布局

    <androidx.cardview.widget.CardView
        xmlns:android="http://schemas.android.com/apk/res/android"

        android:id="@+id/inside_card"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_margin="8dp"
        app:cardCornerRadius="6dp"
        app:cardElevation="6dp"
        app:cardBackgroundColor="#eeeeee"
        >
        <TextView
            android:textAlignment="center"
            android:layout_gravity="center"
            android:id="@+id/unitName"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="1dp"
            android:textColor="@color/cardview_dark_background"
            android:textSize="18dp" />
        </androidx.cardview.widget.CardView> ```

最佳答案

inside_card.xml 中的更改

-> 将卡片 View 的高度从 45dp 增加到 120dp,根据要求进行调整

-> 设置卡片标高0dp,与设计A一样,没有卡片标高。

-> 即使我会建议,不要为此采用卡片 View ,只需采用简单的 LienarLayout 并为此设置一个带有笔画的可绘制形状。因为在卡片 View 上设置边框是一项有点乏味的任务。

 <androidx.cardview.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/inside_card"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="120dp"
    android:layout_margin="8dp"
    app:cardCornerRadius="6dp"
    app:cardElevation="0dp"
    app:cardBackgroundColor="#eeeeee"
    >
    <TextView
        android:textAlignment="center"
        android:layout_gravity="center"
        android:id="@+id/unitName"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="1dp"
        android:textColor="@color/cardview_dark_background"
        android:textSize="18dp" />
    </androidx.cardview.widget.CardView> `

在 GridView 中,也设置垂直间距

      <GridView
            android:layout_gravity="center"
            android:id="@+id/unitsGrid"
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:layout_weight="1"
            android:layout_margin="6dp"
            android:horizontalSpacing="15dp"
            android:verticalSpacing="15dp"
            android:numColumns="2"></GridView>

关于java - 无法在 Cardview 中正确嵌套 GridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61159837/

相关文章:

java - 使用 'java filename'命令运行java文件

java - 在 spring 和 springboot 中从 src 代码外部化错误消息(资源包)的最佳方法是什么?

java - 安卓代码: clarify button clicking facebook url must display

Android CollapsingToolbarLayout 标题 - 上边距错误

c# - WinRT 中带包装的 GridView 方向

java - 有没有办法指示字符串模型属性在 Swagger 中具有最大长度?

java - 如何合并两个 Hibernate 查询?

java - 更改 NavigationDrawer 的颜色单击颜色

gridview - 如何在 Flutter 的 GridView 中为 Widget 设置自定义高度?

asp.net - 在插入模式下加载带有详细信息 View 的页面