如何解决NestedScrollView只能包含一个直接子View的异常?
解决ScrollView/NestedScrollView只能包含一个直接子View的布局异常
报错信息
android.view.InflateException: Binary XML文件第44行:ScrollView只能包含一个直接子View
Caused by: java.lang.IllegalStateException: ScrollView只能包含一个直接子View
问题根源
ScrollView(包括NestedScrollView)的设计规则是只能拥有一个直接子View,你的布局代码中NestedScrollView下直接嵌套了多个TextView和LinearLayout组件,违反了这个规则,导致布局加载时触发异常。
修复方案
将NestedScrollView内的所有子元素统一包裹到一个容器布局(比如垂直方向的LinearLayout)中,让这个容器成为NestedScrollView的唯一直接子View,内部再保留原有的所有UI元素。同时清理原代码中无效的CDATA片段,避免XML解析错误。
修改后的完整布局代码
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:aapt="http://schemas.android.com/aapt" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/half_view_margin_standard" android:layout_marginTop="@dimen/view_margin_standard" android:layout_marginRight="@dimen/half_view_margin_standard" android:layout_marginBottom="@dimen/half_view_margin_standard"> <LinearLayout android:id="@+id/ll_home_header_parent" android:orientation="vertical" android:background="@color/card_background_color" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.core.widget.NestedScrollView android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:fillViewport="true"> <!-- 新增的根容器,作为NestedScrollView的唯一直接子View --> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/tv_month_name" android:textSize="@dimen/app_titles_text_size" android:textStyle="bold" android:textColor="@color/abc_decor_view_status_guard" android:gravity="center" android:layout_gravity="center" android:paddingTop="@dimen/view_margin_standard" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="மே - திங்கள்"/> <LinearLayout android:gravity="center" android:layout_gravity="center" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/half_view_margin_standard"> <TextView android:id="@+id/tv_date" android:textSize="@dimen/app_display_type_1_text_size" android:textColor="@color/abc_decor_view_status_guard" android:gravity="center" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="08-05-2017" android:fontFamily="@font/product_bold"/> </LinearLayout> <LinearLayout android:layout_width="335dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="@dimen/half_view_margin_standard" android:layout_marginBottom="@dimen/half_view_margin_standard" android:orientation="horizontal"> <TextView android:id="@+id/sf" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="@dimen/half_view_margin_standard" android:gravity="left" android:text="நல்ல நேரம்" android:textColor="@color/black" android:textSize="@dimen/app_body_type_1_text_size" /> <TextView android:id="@+id/tv_morning" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="@dimen/half_view_margin_standard" android:gravity="left" android:text="கா" android:textColor="@color/black" android:textSize="@dimen/app_body_type_1_text_size" /> <TextView android:id="@+id/tv_morning_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="@dimen/half_view_margin_standard" android:gravity="left" android:text="10.30 - 12.00" android:textColor="@color/black" android:textSize="@dimen/app_body_type_1_text_size" /> <TextView android:id="@+id/tv_evening" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="@dimen/half_view_margin_standard" android:text="மா" android:textColor="@color/black" android:textSize="@dimen/app_body_type_1_text_size" /> <TextView android:id="@+id/tv_evening_time" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:layout_marginLeft="@dimen/half_view_margin_standard" android:gravity="left" android:text="10.30 - 12.00" android:textColor="@color/black" android:textSize="@dimen/app_body_type_1_text_size" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:background="@color/card_background_color" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tv_tamil_month_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_gravity="center" android:layout_marginLeft="@dimen/half_view_margin_standard" android:gravity="center" android:text="சித்திரைத்" android:textColor="@color/abc_decor_view_status_guard" android:textSize="@dimen/app_big_sub_heads_text_size" /> <TextView android:id="@+id/tv_viratham_home" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_gravity="center" android:layout_marginLeft="@dimen/half_view_margin_standard" android:gravity="center" android:text="சித்திரைத்" android:textColor="@color/abc_decor_view_status_guard" android:textSize="@dimen/app_big_sub_heads_text_size" /> <TextView android:id="@+id/tv_viratham_time_range" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_gravity="center" android:layout_marginLeft="@dimen/half_view_margin_standard" android:gravity="center" android:text="சித்திரைத்" android:textColor="@color/abc_decor_view_status_guard" android:textSize="@dimen/app_big_sub_heads_text_size" /> <TextView android:id="@+id/tv_vishesham" android:textSize="@dimen/app_body_type_1_text_size" android:textColor="@color/black" android:gravity="center" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/half_view_margin_standard" android:text="காலை"/> </LinearLayout> </LinearLayout> </androidx.core.widget.NestedScrollView> </LinearLayout> </androidx.cardview.widget.CardView>
核心修改点
- 新增垂直方向的LinearLayout作为
NestedScrollView的唯一直接子View,所有原UI元素都放在这个容器内,符合ScrollView的布局规则。 - 删除了原代码中无效的
CDATA片段,避免XML解析失败。
内容的提问来源于stack exchange,提问作者user20936145
相关产品推荐
相关产品推荐

