
藍色區域為内容區域,比如聊天im界面上,藍色區域大多數為 recyclerview 實作的聊天清單
綠色區域為面闆區域,用于存儲功能面闆,比如微信的表情界面
在滑動模式下,圖2是功能面闆顯示的結構圖。也就是說,無論是輸入法顯示與否,藍色區域相對于圖一向上滑動了等量輸入法高度的距離。當從輸入法切換到其他功能面闆(比如表情面闆)時,如果原表情面闆就已經顯示在輸入法底下,則可無縫的顯露出來。
而上述的想法,需要幹預到藍色及綠色區域的 layout 邏輯。從滑動模式下的圖一切換稱圖二時,其整體高度實際上不變,而 layout 的啟始坐标是改變的,整體 bound 也是發生了更改,借助 changebounds 可實作平滑過渡。
實作之後效果大緻如下。
使用也是非常簡單。
new panelswitchhelper.builder(this)
.addkeyboardstatelistener {}
.addedittextfocuschangelistener {}
.addviewclicklistener {}
.addpanelchangelistener {}
.contentcanscrolloutside(true)
.logtrack(true)
.build()
複制代碼
為了追求更高的實時體驗,我們還需要相容使用者可能随時調整輸入法高度,随時顯示/隐藏導航欄配置。
某一天,奇怪的螢幕來了,挖孔屏/劉海屏/全面屏。
某一天,issue 回報 pad 有點适配問題。
某一天,部分使用庫的朋友回報說直播間怎麼處理。
維護這個庫,基本都是鑒于自己的興趣愛好,而且一般提議的功能會被稽核,合理的需求都會被安排!
“ 統統支援!”
經過多個版本疊代之後,架構表現出來的優勢:
改進傳統使用 weight+linearlayout 動态更改布局高度适配面闆的技術方案,支援多種原生 viewgroup 容器
為了追求更平滑的适配效果,當輸入法動态調整高度或動态隐藏導航欄時,功能面闆能實時适配
為了追求更流暢的切換效果,支援滑動模式,滑動會更流暢,同時也支援固定模式
豐富的機型适配,适配 全面屏/劉海屏/挖孔屏/pad 等非正常 phone 機型
豐富的場景支援,支援 activity/fragment/dialog/popupwindow,應用到聊天/視訊/直播/資訊流評論等場景
豐富的 api 支援,可自定義内容容器,業務面闆,靈活控制台隐藏,靈活控制切換面闆速度
如果你擔心不知道怎麼用,smaple 已經最直白的幫你梳理了你所需要的場景及 api 示範
如果你想看到更多的場景介紹,可前往 場景使用介紹
如果你想了解更多api使用,可前往 api使用指南
最後下對比 bilibili/虎牙直播/抖音直播/微信朋友圈的效果。
對比結果:比 bilibili 的切換更平滑
對比結果:比 抖音直播 的切換更平滑
對比結果:比 虎牙直播 的切換更平滑
對比結果:比 朋友圈 的切換效果基本一緻
如果你還為輸入場景的頁面變換憂愁,panelswitchhelper 可以幫助你解決非常多的問題。重要的是,我還可以協助你解決你可能遇到的困難呀~。
如果你未來還可以需要開發涉及輸入場景的功能,panelswitchhelper 可以成為你的首選。
歡迎前往體驗,任何問題可提 issue ,我會第一時間回複,如有幫助, 下呗。
大家感興趣興趣的話,後續會更一篇文章寫庫的細節實作及适配衆多奇葩場景的奇思異想。