我正在使用 Android Compose 對測驗應用程式進行模塊化,并讓應用程式運行良好,但似乎如果你想添加自定義主題,如顏色和字體,你會遇到問題。
因此,作為 app/src/main/java/com/xx/myapp/theme/ 下的示例,我們擴展 Color.kt
val Green900 = Color(0XFF242d2d)
val Green800 = Color(0XFF354242)
val Colors.green800: Color
@Composable
get() = Green800
val Colors.green700: Color
@Composable
get() = Green700
現在嘗試在任何“模塊”中使用這些是不可能的,我能看到的唯一方法是在每個模塊中復制整個主題結構,這似乎很愚蠢?
因此,如果我在結構中有一個模塊作為示例 components/src/main/java/com/xx/components/BottomNavBar.kt 我不能使用
selectedContentColor = MaterialTheme.colors.gray800,
除非我在這個模塊中復制 Color.kt 或者我在這個模塊的 build.gradle.kts 中包含“app”模塊......
"implementation"(project(Modules.app))
如果我沒記錯的話,這將導致“回圈依賴”
關于如何在不重復的情況下進行管理的任何建議?
謝謝J
uj5u.com熱心網友回復:
據我了解,一種方法是只為共享定義創建一個模塊,這樣您就不需要匯入整個應用程式模塊。這個共享模塊當然也會被 app 模塊匯入。
更一般而言,每次您有回圈依賴時,您都需要檢查解決方案是否可以將模塊拆分為較小的模塊,從而打破回圈。
uj5u.com熱心網友回復:
在包含Color.kt、Shape.kt、Theme.kt和Type.kt的 ui.theme 檔案夾中,您需要在Color.kt 中定義顏色
val Green900 = Color(0XFF242d2d)
val Green800 = Color(0XFF354242)
在您的Theme.kt 中,您為整個應用程式定義您的一般主題,我看起來像這樣:
@Composable
fun AppTheme(content: @Composable() () -> Unit) {
MaterialTheme(
colors = LightColorPalette,
typography = Typography,
shapes = Shapes,
content = content
)
}
并且:
val LightColorPalette = lightColors(
primary = Green900,
primaryVariant = Green800,
secondary = Green200
/* Other default colors to override
background = Color.White,
surface = Color.White,
onPrimary = Color.White,
onSecondary = Color.Black,
onBackground = Color.Black,
onSurface = Color.Black,
*/
)
如您所見,您可以使用您定義的顏色定義所有所需的表面、背景等,然后像這樣使用它:
MaterialTheme.colors.primary
你也可以在這里查看官方檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/409901.html
標籤:
上一篇:Kotlin函式覆寫空值檢查
下一篇:推送新活動時實時資料觀察者停止
