折叠CollapsingToolbarLayout后底部EditText与ImageView点击失效求助
解决AppBarLayout折叠后EditText与按钮无法点击的问题
我一眼就揪出问题根源了——你的Toolbar设置了app:layout_collapseMode="pin",当CollapsingToolbarLayout折叠完成后,这个Toolbar会固定在顶部区域,而且它的层级直接覆盖在你原来的ConstraintLayout之上,把底部的EditText和按钮完全挡住了!这就是为啥展开时交互正常,折叠后点不动的原因。
给你两个简单高效的解决办法:
方法一:调整层级,让交互控件与Toolbar同层级固定
既然Toolbar要固定,那我们可以让它“隐形”,同时把需要交互的EditText和按钮单独抽出来,作为CollapsingToolbarLayout的直接子View,并设置app:layout_collapseMode="pin",确保它们和Toolbar一起固定,且层级在Toolbar之上:
修改后的核心XML代码如下:
<android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar_layout" android:layout_width="match_parent" android:layout_height="match_parent" app:collapsedTitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse" app:expandedTitleMarginStart="72dp" app:expandedTitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <!-- 保留原来的静态内容(背景图、logo、提示文字等) --> <android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/main_home_banner_img" ... /> <ImageView android:id="@+id/main_home_banner_filter" ... /> <ImageView android:id="@+id/main_home_neah_logo" ... /> <TextView android:id="@+id/main_home_cta_text" ... /> </android.support.constraint.ConstraintLayout> <!-- 单独封装交互控件,设置pin模式跟随折叠固定 --> <android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="40dp" android:layout_gravity="bottom" app:layout_collapseMode="pin"> <EditText android:id="@+id/main_home_text" android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginStart="16dp" android:layout_marginEnd="8dp" android:background="@color/transparent" android:ems="10" android:hint="@string/str_home_service_cta" android:inputType="textPersonName" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/main_home_button" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <ImageView android:id="@+id/main_home_button" android:layout_width="90dp" android:layout_height="match_parent" android:contentDescription="@string/button_contentDescription" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@color/neah_btn_orange" /> <TextView android:id="@+id/main_home_button_text" android:layout_width="70dp" android:layout_height="wrap_content" android:layout_margin="8dp" android:gravity="center" android:text="@string/str_go" android:textColor="@color/neah_text_white" android:textSize="@dimen/size_text_big" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="@+id/main_home_button" app:layout_constraintEnd_toEndOf="@+id/main_home_button" app:layout_constraintStart_toStartOf="@+id/main_home_button" app:layout_constraintTop_toTopOf="@+id/main_home_button" /> </android.support.constraint.ConstraintLayout> <!-- 将Toolbar背景设为透明,避免遮挡交互控件 --> <android.support.v7.widget.Toolbar android:id="@+id/app_bar" android:layout_width="match_parent" android:layout_height="40dp" android:background="@color/transparent" app:layout_collapseMode="pin" /> </android.support.design.widget.CollapsingToolbarLayout>
方法二:移除Toolbar的pin模式,整合到主布局
如果你的Toolbar不需要单独固定展示,也可以直接去掉它的app:layout_collapseMode="pin"属性,把Toolbar的功能整合到原来的ConstraintLayout中,这样整个布局折叠后不会出现层级遮挡问题。不过这种方式需要你自己处理标题栏的显示逻辑,适合不需要独立Toolbar样式的场景。
额外小技巧
测试时可以给Toolbar设置半透明背景,能直观看到它是否遮挡了下方控件;也可以通过android:elevation属性调整控件层级,确保交互控件的elevation值比Toolbar高,但这种方式不如第一种方法稳定。
内容的提问来源于stack exchange,提问作者Canato
相关产品推荐
相关产品推荐

