SlidingPaneLayout:列表 + 详情双栏 · AndroidX 源码指南
AAndroidX 源码指南
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 控制两个面板的宽度分配。

相关页面