专为安卓平板与折叠屏设备量身打造的哔哩哔哩(tv.danmaku.bili)LSPosed 响应式体验重构模块。
解决中小尺寸平板(如 8.8 英寸 OPPO Pad Mini、拯救者 Y700 等)在竖屏手持使用时,B站强行套用平板大屏排版导致的动态双栏割裂、首页卡片拥挤拥塞与旋转黑屏错位等顽疾。
- 关注 / 动态页响应式切换:
- 竖屏(Portrait):强制采用手机原生单栏布局,恢复顶部横向滑动 UP 主头像条与沉浸式卡片流;彻底终结平板模式下违和的双栏中介容器(
WideMediatorFragment)与左侧纵向死板巨型 UP 栏; - 横屏(Landscape):保留大屏双栏排版,左侧 UP 导航栏紧凑贴边靠左对齐($x=145$),右侧卡片满屏自适应。
- 竖屏(Portrait):强制采用手机原生单栏布局,恢复顶部横向滑动 UP 主头像条与沉浸式卡片流;彻底终结平板模式下违和的双栏中介容器(
- 首页推荐流动态 Span 适配:
- 竖屏(Portrait):由臃肿拥挤的 3 列卡片重塑为舒适大图双列(2 列);
- 横屏(Landscape):放行原生宽屏 4 列瀑布流。
- 针对从竖屏切横屏时,关注页
ViewPager产生负数 offset 导致屏幕左侧产生半屏(1260px)黑屏、内容向右整体错位的底层数学缺陷,通过生命周期前置切断污染,实现多循环任意物理旋转无缝过渡。
- 客户端在手机单栏排版下会尝试调用
correctOrientation将 Activity 强行锁定为竖屏(SCREEN_ORIENTATION_PORTRAIT)。本模块将其重写为SCREEN_ORIENTATION_UNSPECIFIED,支持平板 360° 自由旋转。
- 基于 Jetpack Compose 构建极简 MIUIX 风格设置界面:大圆角沉浸卡片、平滑阻尼弹簧胶囊开关。
- 动态广播与系统设置双路实时热同步,配置修改即时生效。
- 提供安全的一键重启客户端按钮。
graph TD
A[物理屏幕旋转 / 启动] --> B[KScreenAdjustUtilsKt 窗口类型判定]
B -->|竖屏| C[伪装为 WindowSizeType.NORMAL]
B -->|横屏| D[原生放行 WindowSizeType.LARGE]
C --> E[关注页 ExhibitionFragment]
E --> F[before: ViewPager 重置 mCurItem=0 & scrollTo 0]
F --> G[杜绝 offset 负递推, 根除 1260px 黑屏]
C --> H[推荐流 PegasusDDConfigKt]
H --> I[强制 spanCount = 2]
C --> J[方向锁定防护]
J --> K[防止客户端误锁 PORTRAIT 姿态]
- 底层窗口断点劫持:挂钩
kntr.common.screen.adjust.KScreenAdjustUtilsKt中的isLargePortrait、isLarge、isMedium、isNormal、widthBreakPoint*等全局断点方法。 - 容器与适配器解耦:拦截
ExhibitionFragment.bg()返回false,禁用WideMediatorFragment双栏中介逻辑。 - 数学递推重置:拦截
ExhibitionFragment的onConfigurationChanged、Yf与fg,在适配器数据集发生变化前前置重置 ViewPager 状态。
- 目标应用:
tv.danmaku.bili(哔哩哔哩) - 目标进程:
tv.danmaku.bili
从 Releases 页面下载最新的 io.github.benbaobaoshigemi.biliresponsive-vX.X.X.apk,在 LSPosed 管理器中启用模块并勾选哔哩哔哩作用域,重启哔哩哔哩即可。
git clone https://github.com/benbaobaoshigemi/BiliResponsive.git
cd BiliResponsive
./gradlew assembleRelease本项目基于 Apache License 2.0 协议开源。