Android中Expandable Layout置于CardView底部却向上展开的问题求助
解决ExpandableLayout从CardView底部向上展开的问题
看起来你遇到的问题是ExpandableLinearLayout默认向上展开,而你期望它从CardView底部向下展开。这个问题主要来自布局结构不合理和ExpandableLayout展开方向属性未正确设置,咱们一步步来解决:
1. 重构CardView内部布局结构
CardView继承自FrameLayout,直接在里面放多个子View会导致布局重叠,无法正确控制垂直排列逻辑。我们需要用垂直LinearLayout作为CardView的根容器,把顶部内容区和底部ExpandableLayout垂直排列:
修改后的CardView核心布局代码:
<android.support.v7.widget.CardView android:id="@+id/cardview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <!-- 用垂直LinearLayout作为CardView的根容器 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <!-- 原顶部内容区域(图片、标题、触发按钮) --> <LinearLayout android:id="@+id/holderimg" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:layout_marginBottom="15dp" android:orientation="horizontal"> <ImageView android:id="@+id/imageView5" android:layout_width="68dp" android:layout_height="62dp" android:layout_marginLeft="20dp" android:layout_marginTop="10dp" app:srcCompat="@drawable/s1960678" /> <TextView android:id="@+id/nameArray" android:layout_width="250dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="10dp" android:fontFamily="serif" android:includeFontPadding="false" android:text="TextView" android:textSize="14sp" android:textStyle="bold" /> <RelativeLayout android:id="@+id/button" android:layout_width="48dp" android:layout_height="48dp" android:layout_gravity="right" android:layout_marginTop="30dp" android:layout_marginRight="10dp" android:background="@drawable/ic_arrow_drop_down_black_24dp" android:gravity="right|center_horizontal"> <View android:id="@+id/view2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" /> </RelativeLayout> </LinearLayout> <!-- 底部的ExpandableLinearLayout --> <com.github.aakira.expandablelayout.ExpandableLinearLayout android:id="@+id/expandableLayout" android:layout_width="match_parent" android:layout_height="72dp" android:orientation="vertical" app:ael_duration="400" app:ael_expanded="false" <!-- 强制设置展开方向为底部 --> app:ael_expansionDirection="bottom"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <Button android:id="@+id/button3" android:layout_width="199dp" android:layout_height="wrap_content" android:text="Button" tools:text="Download .PDF" /> <Button android:id="@+id/button5" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button" tools:text="View PDF" /> </LinearLayout> </com.github.aakira.expandablelayout.ExpandableLinearLayout> </LinearLayout> </android.support.v7.widget.CardView>
2. 显式设置ExpandableLayout的展开方向
这个ExpandableLayout库默认展开方向可能是向上,你需要添加app:ael_expansionDirection="bottom"属性,强制它从当前位置向下展开。
3. 移除多余布局属性
删掉ExpandableLinearLayout上的layout_alignParentBottom="true"、layout_gravity="bottom"等属性——现在它在垂直LinearLayout的底部,这些属性会干扰布局逻辑,完全不需要保留。
额外检查:Adapter动画影响
如果你的MainAdapter设置了RecyclerView的Item动画,可能会干扰ExpandableLayout的展开行为。可以先临时关闭Item动画测试:
mRecyclerView.setItemAnimator(null);
如果问题消失,再调整动画类型或禁用针对ExpandableLayout的动画即可。
这样修改后,ExpandableLinearLayout就会从CardView底部向下展开,符合你的预期了。
内容的提问来源于stack exchange,提问作者UFO zBlOoDZerOz
相关产品推荐
相关产品推荐

