# SplitPaneLayout **Repository Path**: abbasspace/split-pane-layout ## Basic Information - **Project Name**: SplitPaneLayout - **Description**: 用于分割屏幕为上下或左右两部分的布局,支持自定义分割线、自定义分割线拖动区域 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-25 - **Last Updated**: 2026-05-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: View, layout ## README # SplitPaneLayout 将屏幕划分为上下或左右两个区域的自定义布局,自带可拖动的分屏分割线(风格接近系统分屏)。 | 竖屏预览 | 横屏预览 | |------|------| | ![screenshot](screenshot/Screenshot_2026-01-25-03-41-16-52_8404d83032a5bd9be7f35d2d25879a97.jpg) | ![screenshot](screenshot/Screenshot_2026-01-25-03-41-26-99_8404d83032a5bd9be7f35d2d25879a97.jpg) | ## 功能特性 - **分割线**:自定义外观、拖动时的样式、可扩展的触摸热区(`DraggableDrawable`) - **分割线位置**:支持像素或百分比初始位置 - **区域限制**:第一/第二块区域支持像素或百分比最小尺寸 - **编程接口**:隐藏/恢复某一侧、监听位置变化、键盘方向键调整 ## 添加依赖 ### JitPack(推荐) 仓库地址:[https://gitee.com/abbasspace/split-pane-layout](https://gitee.com/abbasspace/split-pane-layout) 在根目录 `settings.gradle.kts`(或 `settings.gradle`)的 `dependencyResolutionManagement` 中加入 JitPack: **Kotlin DSL** ```kotlin dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() maven { url = uri("https://jitpack.io") } } } ``` **Groovy** ```groovy dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() maven { url 'https://jitpack.io' } } } ``` 在模块 `build.gradle.kts` / `build.gradle` 中添加: ```kotlin dependencies { implementation("com.gitee.abbasspace:split-pane-layout:v1.0") } ``` ```groovy dependencies { implementation 'com.gitee.abbasspace:split-pane-layout:v1.0' } ``` > 依赖版本号与 Gitee 上的 **Git Tag** 一致(例如 `v1.0`)。发布新版本时打新 tag 并到 [JitPack](https://jitpack.io) 触发构建即可。 ### 本地模块(开发调试) 将本仓库作为子模块或 `includeBuild` 引入后: ```kotlin dependencies { implementation(project(":split-pane-layout")) } ``` ### 发布到本地 Maven ```bash ./gradlew :split-pane-layout:publishToMavenLocal ``` 坐标:`com.gitee.abbasspace:split-pane-layout:1.0.0`(版本见 `gradle.properties` 中的 `SPL_VERSION`) ## 使用说明 ### XML 布局 ```xml ``` **注意** - `SplitPaneLayout` **必须且只能**包含 **两个** 子 View。 - 不建议作为 Activity 根布局直接使用;未处理 `WindowInsets`,建议外层套 `FrameLayout` / `ConstraintLayout` 等容器。 ### 自定义分割线与拖动区域 库内提供 `SplitHandleDrawable`,实现 `SplitPaneLayout.DraggableDrawable`,可缩小实际可拖动的热区(例如仅中间胶囊区域): ```kotlin val handle = SplitHandleDrawable(context) splitPaneLayout.splitterDrawable = handle splitPaneLayout.splitterDraggingDrawable = handle ``` 也可自行实现 `SplitPaneLayout.DraggableDrawable` 接口。 ### 常用 XML 属性 | 属性 | 说明 | |------|------| | `spl:orientation` | `horizontal` / `vertical` | | `spl:splitterSize` | 分割线宽度(厚度) | | `spl:splitterMovable` | 是否允许用户拖动 | | `spl:splitterPosition` | 初始位置(`dp` 或百分比,如 `33%`) | | `spl:splitterBackground` | 分割线背景(drawable 或颜色) | | `spl:splitterDraggingBackground` | 拖动时的背景 | | `spl:splitterTouchSlop` | 触摸热区扩展 | | `spl:paneSizeMin` | 单侧最小尺寸(像素,与百分比二选一) | | `spl:firstPaneSizeMinPercent` | 第一块区域最小占比 | | `spl:secondPaneSizeMinPercent` | 第二块区域最小占比 | ## 项目结构 | 模块 | 说明 | |------|------| | `:split-pane-layout` | 对外发布的 Android Library | | `:app` | 示例 Demo | ## 更新记录 2026-01-25 合并上游 PR,主要修复: - 以编程方式创建布局时,子布局无法获得焦点(#18) - 以编程方式创建布局时缺少默认属性(#19) - 子 View 可点击时 `splitterTouchSlop` 失效(#21)—— 在 `NestedScrollView` 等复杂嵌套中尤为重要 - 布局未占满屏幕时百分比位置计算错误(#22) - 分割线在边界处被部分遮挡(#23) ## 源项目 本仓库基于 [MobiDevelop/android-split-pane-layout](https://github.com/MobiDevelop/android-split-pane-layout) 扩展,增加了百分比最小区域、自定义拖动热区、`hideFirstPane` / `hideSecondPane` 等能力。 ## License 基于源项目,遵循 [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0)。