Android:LinearLayout 内的 CardView 使应用程序崩溃

Posted

技术标签:

【中文标题】Android:LinearLayout 内的 CardView 使应用程序崩溃【英文标题】:Android: CardView inside LinearLayout makes app to crash 【发布时间】:2021-11-07 04:28:23 【问题描述】:

给定下一个xml:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:layout_gravity="center"
    android:gravity="center"
    android:orientation="vertical">

    <ScrollView
        android:id="@+id/llCommunityMain"
        android:layout_
        android:layout_
        android:paddingBottom="70dp"
        android:scrollbars="none">

        <LinearLayout
            android:id="@+id/llCommunity"
            android:layout_
            android:layout_
            android:orientation="vertical"
            android:layout_gravity="center"
            android:gravity="center">

            <androidx.cardview.widget.CardView
                xmlns:app="http://schemas.android.com/apk/res-auto"
                android:id="@+id/cvFindCollege"
                android:layout_
                android:layout_
                android:paddingLeft="15dp"
                android:paddingRight="15dp"
                android:layout_marginTop="20dp"
                android:layout_margin="10dp"
                app:cardCornerRadius="5dp"
                app:cardElevation="10dp"
                app:cardBackgroundColor="#f5f5f5"
    android:theme="@style/Theme.MaterialComponents.Light">

                <com.testmepracticetool.toeflsatactexamprep.component.view.TMButton
                    android:id="@+id/btnSuggestImprovements"
                    android:layout_
                    android:layout_
                    android:textAlignment="center"
                    android:layout_gravity="center_horizontal"
                    android:theme="@style/Theme.MaterialComponents.Light"
                    android:background="@android:drawable/dialog_holo_light_frame"
                    style="@style/button_text_default"
                    android:text="@string/activitycommunity_button_suggestimprovements" />

            </androidx.cardview.widget.CardView>

            <LinearLayout
                android:layout_
                android:layout_
                android:paddingLeft="15dp"
                android:paddingRight="15dp"
                android:layout_marginTop="20dp">

                <com.testmepracticetool.toeflsatactexamprep.component.view.TMButton
                    android:id="@+id/btnFindCollege"
                    android:layout_
                    android:layout_
                    android:textAlignment="center"
                    android:layout_gravity="center_horizontal"
                    android:background="@android:drawable/dialog_holo_light_frame"
                    style="@style/button_text_default"
                    android:text="@string/community_button_findcollege" />

            </LinearLayout>

            <LinearLayout
                android:layout_
                android:layout_
                android:id="@+id/llCommunityKhan"
                android:paddingLeft="15dp"
                android:paddingRight="15dp"
                android:layout_marginTop="20dp">

                <com.testmepracticetool.toeflsatactexamprep.component.view.TMButton
                    android:id="@+id/btnKhan"
                    android:layout_
                    android:layout_
                    android:textAlignment="center"
                    android:layout_gravity="center_horizontal"
                    android:background="@android:drawable/dialog_holo_light_frame"
                    style="@style/button_text_default"
                    android:text="@string/activitykhan_title" />

            </LinearLayout>

        </LinearLayout>

    </ScrollView>

    <include layout="@layout/footermenu_default" />

</RelativeLayout>

页脚.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/llMainMenu"
    android:baselineAligned="false"
    android:layout_
    android:layout_
    android:orientation="horizontal"
    android:layout_gravity="center_vertical"
    android:gravity="center_vertical"
    android:layout_alignParentBottom="true"
    android:paddingLeft="20dp"
    android:paddingRight="20dp"
    android:paddingBottom="10dp"
    android:visibility="gone"
    android:paddingTop="10dp"
    android:background="@drawable/layout_border_top">

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:layout_weight=".20"
        android:gravity="center_horizontal">

        <ImageView
            android:contentDescription="@string/pref_category_animations"
            android:id="@+id/btnTests"
            android:layout_
            android:layout_
            android:paddingLeft="3dp"
            android:paddingStart="3dp"
            android:paddingRight="3dp"
            android:paddingEnd="3dp"
            android:src="@drawable/button_main_tests" />

        <TextView
            android:id="@+id/tvMainMenuTests"
            android:layout_
            android:layout_
            android:layout_gravity="center_horizontal"
            android:paddingTop="5dp"
            android:text="@string/mainmenu_button_tests"
            android:textColor="#a8a8a8"
            android:textSize="11sp" />

    </LinearLayout>

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:layout_weight=".20"
        android:gravity="center_horizontal">

        <ImageView
            android:contentDescription="@string/pref_category_animations"
            android:id="@+id/btnRecords"
            android:layout_
            android:layout_
            android:paddingLeft="3dp"
            android:paddingStart="3dp"
            android:paddingRight="3dp"
            android:paddingEnd="3dp"
            android:src="@drawable/button_main_records" />

        <TextView
            android:id="@+id/tvMainMenuRecords"
            android:layout_
            android:layout_
            android:layout_gravity="center_horizontal"
            android:paddingTop="5dp"
            android:text="@string/mainmenu_button_records"
            android:textColor="#a8a8a8"
            android:textSize="11sp" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/llMainMenuImportExport"
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:layout_weight=".20"
        android:gravity="center_horizontal"
        android:visibility="gone">

        <ImageView
            android:contentDescription="@string/pref_category_animations"
            android:id="@+id/btnImportExport"
            android:layout_
            android:layout_
            android:paddingLeft="3dp"
            android:paddingStart="3dp"
            android:paddingRight="3dp"
            android:paddingEnd="3dp"
            android:visibility="gone"
            android:src="@drawable/button_records_importexport" />

        <TextView
            android:id="@+id/tvMainMenuImportExport"
            android:layout_
            android:layout_
            android:paddingTop="5dp"
            android:text="@string/mainmenu_button_importexport"
            android:textColor="#a8a8a8"
            android:textSize="11sp"
            android:visibility="gone"/>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/llMainMenuProgress"
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:layout_weight=".20"
        android:gravity="center_horizontal"
        android:visibility="gone">

        <ImageView
            android:contentDescription="@string/pref_category_animations"
            android:id="@+id/btnProgress"
            android:layout_
            android:layout_
            android:paddingLeft="3dp"
            android:paddingStart="3dp"
            android:paddingRight="3dp"
            android:paddingEnd="3dp"
            android:visibility="gone"
            android:src="@drawable/button_records_progress" />

        <TextView
            android:id="@+id/tvMainMenuProgress"
            android:layout_
            android:layout_
            android:layout_gravity="center_horizontal"
            android:paddingTop="5dp"
            android:text="@string/mainmenu_button_progress"
            android:textColor="#a8a8a8"
            android:textSize="11sp"
            android:visibility="gone"/>

    </LinearLayout>

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:layout_weight=".20"
        android:gravity="center_horizontal">

        <ImageView
            android:contentDescription="@string/pref_category_animations"
            android:id="@+id/btnCommunity"
            android:layout_
            android:layout_
            android:paddingLeft="3dp"
            android:paddingStart="3dp"
            android:paddingRight="3dp"
            android:paddingEnd="3dp"
            android:src="@drawable/button_main_community" />

        <TextView
            android:id="@+id/tvMainMenuCommunity"
            android:layout_
            android:layout_
            android:layout_gravity="center_horizontal"
            android:paddingTop="5dp"
            android:text="@string/mainmenu_button_community"
            android:textColor="#a8a8a8"
            android:textSize="11sp" />

    </LinearLayout>

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:layout_weight=".20"
        android:gravity="center_horizontal">

        <ImageView
            android:contentDescription="@string/pref_category_animations"
            android:id="@+id/btnUser"
            android:layout_
            android:layout_
            android:paddingLeft="3dp"
            android:paddingStart="3dp"
            android:paddingRight="3dp"
            android:paddingEnd="3dp"
            android:src="@drawable/button_main_user" />

        <TextView
            android:id="@+id/tvMainMenuUser"
            android:layout_
            android:layout_
            android:layout_gravity="center_horizontal"
            android:paddingTop="5dp"
            android:text="@string/mainmenu_button_User"
            android:textColor="#a8a8a8"
            android:textSize="11sp" />

    </LinearLayout>

</LinearLayout>

我的应用在尝试设置布局时立即崩溃,但出现以下异常

android.widget.TableRow$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams

可能出了什么问题?

【问题讨论】:

页脚在预览中是完全白色的。我的应用程序随之崩溃。尝试在没有页脚的情况下运行您的应用程序。然后一切都应该正常运行。您现在知道在哪里进行故障排除。我不能没有全部内容。所以希望你的问题得到解决:) 干杯 【参考方案1】:

我用我从你那里得到的东西检查了你的布局。我没有footer(未测试)和Button 实现。我用默认的一次替换了你的Buttons。我改变了什么;对于这么多的Views,您不应该使用ScrollView,它应该作为rootView 在顶部。我用NestedScrollView 替换了您的ScrollView,并用根RelativeLayout 交换了位置(也更改了参数):

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView 
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:layout_gravity="center"
    android:gravity="center"
    android:orientation="vertical"
    android:scrollbars="none">

    <RelativeLayout
        android:id="@+id/llCommunityMain"
        android:layout_
        android:layout_
        android:layout_gravity="center"
        android:gravity="center"
        android:paddingBottom="70dp">

        <LinearLayout
            android:id="@+id/llCommunity"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:gravity="center"
            android:orientation="vertical">

            <RelativeLayout
                android:layout_
                android:layout_>

                <androidx.cardview.widget.CardView 
                    android:id="@+id/cvFindCollege"
                    android:layout_
                    android:layout_
                    android:layout_margin="10dp"
                    android:layout_marginTop="20dp"
                    android:paddingLeft="15dp"
                    android:paddingRight="15dp"
                    android:theme="@style/Theme.MaterialComponents.Light"
                    app:cardBackgroundColor="#f5f5f5"
                    app:cardCornerRadius="5dp"
                    app:cardElevation="10dp">

                    <Button
                        android:id="@+id/btnSuggestImprovements"
                        android:layout_
                        android:layout_
                        android:layout_gravity="center_horizontal"
                        android:background="@android:drawable/dialog_holo_light_frame"
                        android:text="Button 1"
                        android:textAlignment="center"
                        android:theme="@style/Theme.MaterialComponents.Light" />

                </androidx.cardview.widget.CardView>
            </RelativeLayout>

            <LinearLayout
                android:layout_
                android:layout_
                android:layout_marginTop="20dp"
                android:paddingLeft="15dp"
                android:paddingRight="15dp">

                <Button
                    android:id="@+id/btnFindCollege"
                    android:layout_
                    android:layout_
                    android:layout_gravity="center_horizontal"
                    android:background="@android:drawable/dialog_holo_light_frame"
                    android:text="Button 2"
                    android:textAlignment="center" />

            </LinearLayout>

            <LinearLayout
                android:id="@+id/llCommunityKhan"
                android:layout_
                android:layout_
                android:layout_marginTop="20dp"
                android:paddingLeft="15dp"
                android:paddingRight="15dp">

                <Button
                    android:id="@+id/btnKhan"
                    android:layout_
                    android:layout_
                    android:layout_gravity="center_horizontal"
                    android:background="@android:drawable/dialog_holo_light_frame"
                    android:text="Button 3"
                    android:textAlignment="center" />

            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>
</androidx.core.widget.NestedScrollView>

但是,如果我运行该应用程序,一切正常。我的猜测是NestedScrollView 充当rootView 解决了这个问题。如果没有,您只需要检查两件事。您的Button 实现或footer。干杯:)

结果:

【讨论】:

感谢您的回复@DEX7RA。我已经添加了页脚,以防您继续帮助我。我仍然无法弄清楚发生了什么,尝试了您的xml无济于事,同样的例外:( 没有页脚它仍然崩溃?即使您删除了 事实是,如果我删除 CardView 或用 LinearLayout 替换它就可以正常工作,但我需要一个卡片视图 @DEX7RA 您需要一个围绕 CardView 的 RelativeLayout。如果一切正常,那么这将解决它。 我需要页脚,因为它是菜单,但只是尝试查看它是否有效并且仍然是相同的异常。我会尝试你的最后一个建议,用 RelativeLayout 包装 CardView 并让你知道@DEX7RA

以上是关于Android:LinearLayout 内的 CardView 使应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

android: ScrollView 内的 RecyclerView

默认情况下,LinearLayout 内的 ImageView 在侧面有边距

.Net程序猿玩转Android开发---线性布局LinearLayout

Android Studio 如何在 LinearLayout 元素中实现锚链接?

Android布局

LinearLayout(线性布局)