【问题标题】:Not able to properly nest GridView inside Cardview无法在 Cardview 中正确嵌套 GridView
【发布时间】:2020-04-11 16:09:04
【问题描述】:

我使用 RecyclerView ,它呈现 CardView 。这个 CardView 有 2 个 TextViews 和一个 GridView , GridView 将 CardView (我们称之为 inside_card )作为它的孩子。现在我无法更改此 inside_card 的高度。下面给出的是我想要实现的(图 A)和我得到的(图 B)。

以下是我的布局。 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> ```

【问题讨论】:

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


    【解决方案1】:

    inside_card.xml 的变化

    -> 卡片视图高度从 45dp 增加到 120dp,根据需要调整

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

    -> 即使我会建议,不要为此采用卡片视图,只需采用简单的 LienarLayout 并为此设置一个带有笔划的可绘制形状。因为在卡片视图上设置边框有点繁琐。

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

    【讨论】:

    • 改变 layout_height 在 CardView 中不起作用,尽管垂直间距有效。
    猜你喜欢
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    相关资源
    最近更新 更多