【Android】使用Compose實(shí)現(xiàn)Android的多屏異顯功能

問題

Android平臺上一直都支持多屏幕設(shè)備開發(fā),使用android.app.Presentation可以快速的創(chuàng)建一個(gè)副屏顯示頁面(文檔),但是只能使用傳統(tǒng)的View布局,并不支持直接使用compose-ui,導(dǎo)致我們在開發(fā)多屏幕應(yīng)用時(shí)無法統(tǒng)一UI框架。

幸運(yùn)的是Android提供了DialogCompose實(shí)現(xiàn)方式,位于android.compose.ui:ui組件中的androidx.compose.ui.window.Dialog,而android.app.Presentation恰恰是繼承自Dialog的一個(gè)子類,于是可以得出一個(gè)實(shí)現(xiàn)方案,魔改出一個(gè)androidx.compose.ui.window.Presentation就可以使用了。

解決方法

打開后屏幕會顯示出兩個(gè)區(qū)域,這就是模擬的副屏,目前這個(gè)副屏無法提供手勢操作,最好有實(shí)體的雙屏設(shè)備來測試,比如微軟的suface duo。

使用示例

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // 獲取所有的屏幕信息(主屏+副屏)
    displayManagerCompat.displays.also { ownDisplayList ->
        setContent { // 設(shè)置內(nèi)容
            ownDisplayList.forEach { // 遍歷屏幕
                if (it.displayId == Display.DEFAULT_DISPLAY) { // 是否為默認(rèn)屏幕(主屏)
                    composeContent(it) // 組合屏幕UI
                } else {
                    // 使用AndroidPresentation.android.kt中定義的Presentation函數(shù)來開啟副屏的顯示
                    Presentation(it, onDismissRequest = {
                        /**副屏關(guān)閉時(shí)的回調(diào),類似Dialog*/
                    }) {
                        composeContent(it) // 組合屏幕UI
                    }
                }
            }
        }
    }
}

/**
 * 組合屏幕UI
 */
@Composable
fun composeContent(display: Display) {
    DemoTheme {
        // UI內(nèi)容省略
        ...
        ...
        ...
    }
}

運(yùn)行結(jié)果(僅供參考):

擴(kuò)展使用

android.app.Presentation的構(gòu)造方法中是可以支持傳入ServiceApplication作為Context來使用的。這里就無法使用我們上文中的android.app.Presentation來實(shí)現(xiàn)了,不過可以參考androidx.activity.ComponentActivity的實(shí)現(xiàn)來定制一個(gè)自己的androidx.presentation.ComponentPresentation

以下是已經(jīng)修改好的版本,僅供參考

作者:Ning1994
鏈接:https://juejin.cn/post/7036995991949541413

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容