빈 Jetpack Compose 앱 템플릿 정리
이 기사는 원래 2022년 5월 7일 vtsen.hashnode.dev에 게시되었습니다.
순수한 Jetpack Compose 앱의 경우 기술적으로 Android 보기 시스템용인
themes.xml
및 colors.xml
가 더 이상 필요하지 않습니다.그러나 나는 여전히
themes.xml
와 colors.xml
가 정의되어 있는 많은 코드를 보았습니다. 개인적으로 중복이나 혼동을 피하기 위해 제거하겠습니다.1. themes.xml 및 colors.xml 제거
themes.xml
및 colors.xml
를 제거하면 여전히 AndroidManifest.xml
에서 참조되고 있기 때문에 컴파일 오류가 발생할 수 있습니다. AndroidManifest.xml
를 수정해야 합니다.android:theme="@style/Theme.EmptyComposeApp"
및 <application>
모두에서 <activity>
제거<application
...
android:theme="@style/Theme.EmptyComposeApp">
<activity
...
android:theme="@style/Theme.EmptyComposeApp">
...
</activity>
</application>
android:theme="@android:style/Theme.Material.Light.NoActionBar"
의 상위 스타일인 <application>
의 themes.xml
로 바꿉니다.<application
...
android:theme="@android:style/Theme.Material.Light.NoActionBar">
...
</application>
The creates an app without the top action bar. The top action bar can be created using
Scaffold
composable function. See this Add Top App Bar Example in this Simple LazyColumn App.
나는 이것을 추가하지 않으려고 했지만
android:theme="@android:style/Theme.Material.Light.NoActionBar"
ComponentActivity()
는 기본적으로 상단 작업 표시줄을 생성하므로 Jetpack Compose를 사용하여 제거할 생각이 없습니다.2. 작성으로 상태 표시줄 색상 설정
음, 앱은 작동하지만 상태 표시줄의 기본 보라색이 사라졌습니다.
원본
themes.xml
을 보면 거기에 상태 표시줄 색상을 설정합니다.<resources>
<style name="Theme.EmptyComposeApp" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:statusBarColor">@color/purple_700</item>
</style>
</resources>
이것이 제거되었으므로 Jetpack Compose에서 이를 구현해야 합니다. 그러기 위해서는 Accompanist의 System UI Controller을 사용해야 합니다.
com.google.accompanist:accompanist-systemuicontroller
:dependencies {
...
implementation "com.google.accompanist:accompanist-systemuicontroller:0.24.1-alpha"
...
}
ui\Theme\Theme.kt
에서 purple_700
색상이기도 한 세트 primaryVariant
색상에 이를 추가합니다.val systemUiController = rememberSystemUiController()
systemUiController.setStatusBarColor(
color = colors.primaryVariant
)
fun EmptyComposeAppTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable () -> Unit
) {
val colors = if (darkTheme) {
DarkColorPalette
} else {
LightColorPalette
}
val systemUiController = rememberSystemUiController()
systemUiController.setStatusBarColor(
color = colors.primaryVariant
)
MaterialTheme(
colors = colors,
typography = Typography,
shapes = Shapes,
content = content
)
}
Android Studio의 템플릿 프로젝트는 탐색 모음 색상을 설정하지 않습니다. 따라서 위의 예에서는 설정하지 않습니다. 그러나 일반적으로 탐색 및 상태 표시줄 모두에 대해 동일한 색상을 설정하려고 합니다. 이 경우
systemUiController.setSystemBarsColor()
를 사용할 수 있습니다.val systemUiController = rememberSystemUiController()
systemUiController.setSystemBarsColor(
color = colors.primaryVariant
)
Since I want to use this example as my own template project. I'm going to change it to use
systemUiController.setSystemBarsColor()
in this app example.
미리보기가 렌더링되지 않음
시스템 UI 컨트롤러를 사용할 때 미리보기가 작동하지 않는 버그가 있습니다. 문제 추적기here를 참조하십시오.
java.lang.IllegalArgumentException: The Compose View must be hosted in an Activity with a Window!
이 문제를 해결하려면 미리보기에서
useSystemUIController
매개변수를 전달하여 시스템 UI 컨트롤러를 비활성화해야 합니다.Theme.kt
에서:@Composable
fun EmptyComposeAppTheme(
...
useSystemUIController: Boolean = true,
...
) {
...
if (useSystemUIController) {
val systemUiController = rememberSystemUiController()
systemUiController.setStatusBarColor(
color = colors.primaryVariant)
}
...
}
MainActivity.kt
에서:@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
EmptyComposeAppTheme(useSystemUIController = false) {
...
}
}
요약
이제 리소스 폴더에
strings.xml
만 있습니다. 멋지지 않나요?아마도 Jetpack Compose 프로젝트의 시작점으로 이것을 사용할 것입니다. 이 diffhere는 패키지 및 프로젝트 이름을 변경하는 데 필요한 변경 사항을 보여줍니다.
[Updated - 18 July, 2022]: If you rename the package and etc. from the template app, you're maybe getting the compilation error (usually is related to string resources). In that case, you can invalidate caches. I only turn on the Clear VCS Log caches and indexes and it works for me.
소스 코드
GitHub 저장소: Demo_CleanEmptyCompose
또한보십시오
Reference
이 문제에 관하여(빈 Jetpack Compose 앱 템플릿 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vtsen/clean-empty-jetpack-compose-app-template-24aj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)