View 体系
View 体系 · androidx.core
SlidingPaneLayout:列表 + 详情双栏Core 1.20.0-alpha01
大屏并排、小屏覆盖的响应式双栏布局,与锁模式和滑动监听。
最后更新 2026-08-01
复制即用
<androidx.slidingpanelayout.widget.SlidingPaneLayout
android:id="@+id/sliding_pane_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 第一个子 View:主面板(列表) -->
<ListView
android:layout_width="280dp"
android:layout_height="match_parent" />
<!-- 第二个子 View:详情面板 -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.slidingpanelayout.widget.SlidingPaneLayout>Kotlin 控制:
import androidx.slidingpanelayout.widget.SlidingPaneLayout
val pane = findViewById<SlidingPaneLayout>(R.id.sliding_pane_layout)
if (pane.canSlide()) {
pane.openPane()
}
// 监听滑动
pane.setPanelSlideListener(object : SlidingPaneLayout.PanelSlideListener {
override fun onPanelSlide(panel: View, slideOffset: Float) {}
override fun onPanelOpened(panel: View) {}
override fun onPanelClosed(panel: View) {}
})常见陷阱
- 子 View 数量/顺序错:第一个是主面板(窄),第二个是详情面板(宽),顺序错了行为异常。
- 忘判 isSlideable:大屏上不可滑动时
openPane()无效果,先检查canSlide()。 - 宽度不配:主面板固定宽 + 详情
match_parent;用layout.weight控制分配。 - Compose 场景:用
ListDetailPaneScaffold(adaptive-layout)替代。
要点
- 两个直接子 View:第一个是主面板(窄),第二个是详情面板(宽)。
- 大屏时并排显示;宽度不足时详情面板覆盖在主面板上,可滑动切换。
isSlideable判断当前是否可滑动;openPane()/closePane()编程控制。- 适合”列表 + 详情”的响应式布局;小屏行为类似抽屉,大屏行为类似双栏。
- 使用
layout.weight控制两个面板的宽度分配。