如何实现ExpandableLayout向上展开而非默认的向下展开
ExpandableLayout 向上展开适配方案
这个组件默认的展开方向是从布局顶部向下拉伸,放在页面底部时确实会出现方向不对的问题,直接用组件自带的方向配置就能解决,不需要自己改写动画逻辑,具体操作如下:
核心配置调整
- 引入组件时使用稳定版本的依赖,这个组件的所有基础方向配置从早期版本就已支持,不存在兼容门槛
- 在你现有布局的ExpandableLayout标签里新增垂直方向固定边属性
app:el_vertical_gravity="bottom"。这个属性的作用是固定ExpandableLayout的下边界位置,展开时高度增加会从固定的下边界向上延展内容,替换掉默认的固定上边界、向下拉伸的逻辑 - 调整ExpandableLayout在父布局中的位置,确保它的下边界紧贴页面底部:
- 如果父布局是ConstraintLayout,把ExpandableLayout的底部约束绑定到父布局底部
- 如果父布局是垂直排列的LinearLayout,把ExpandableLayout放在布局最末端即可
修改后的完整示例布局
<net.cachapa.expandablelayout.ExpandableLayout android:id="@+id/expandable_layout_0" android:layout_width="match_parent" android:layout_height="wrap_content" app:el_duration="1000" app:el_expanded="false" app:el_parallax="0.5" app:el_vertical_gravity="bottom"> <TextView android:layout_width="match_parent" android:layout_height="200dp" android:background="@color/teal_700"/> </net.cachapa.expandablelayout.ExpandableLayout>
常见踩坑注意事项
- 如果你把触发展开的按钮放进ExpandableLayout的子内容区,要把按钮放在子内容的最底部位置,这样收起状态下按钮才会始终显示,不会被折叠隐藏
- 开启
el_vertical_gravity="bottom"后,保持ExpandableLayout的高度为wrap_content即可,不要设置固定高度,避免高度计算异常导致展开动画错位 - 如果页面存在固定高度的底部导航栏,记得给ExpandableLayout设置对应的底部边距,让它的固定下边界和导航栏顶部对齐,避免展开内容被导航栏遮挡
内容的提问来源于stack exchange,提问作者akhtar shah
相关产品推荐
相关产品推荐

