У меня проблема: всякий раз, когда у меня есть многомодульный проект, все предварительные просмотры пользовательского интерфейса Jetpack Compose, за исключением тех, которые находятся в модуле приложения, отображают дополнительный TopAppBar с текстом androidx.compose.ui.tooling.PreviewActivity
при выполнении на устройстве. Вы можете увидеть результат здесь:
При просмотре предварительного просмотра без его выполнения TopAppBar не отображается. Проблема возникает в простейшем многомодульном проекте, где оба модуля также содержат только один компонуемый предварительный просмотр. Это наводит меня на мысль, что это не вызвано сложной настройкой. Я уже пробовал удалять и добавлять различные вещи в файл build.gradle и манифест, но, похоже, ничего не помогает.
Модуль приложения:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
ComposePreviewWithAdMobTheme {
}
}
}
}
@Preview
@Composable
fun Preview() {
Text("Preview!")
}
Основной модуль:
@Preview
@Composable
fun CorePreview() {
Text("CorePreview!")
}
Как упоминалось ранее, предварительный просмотр модуля приложения работает нормально, в то время как другой показывает дополнительный TopAppBar. Кто-нибудь сталкивался с подобными трудностями и может мне помочь?
Спасибо.
Это ожидаемое поведение.
Предварительные просмотры Jetpack Compose выполняются в инструментированном контексте и используют информацию о приложении, найденную в AndroidManifest.xml
модуля или его androidTest
исходном наборе.
Когда предварительный просмотр запускается из модуля :app
, он использует основной AndroidManifest.xml
, который содержит правильные android:label
и android:name
в теге <application>
. Когда он запускается из модуля, если он не содержит файла манифеста, он использует файл по умолчанию, в котором android:label
установлено на полное имя инструментированного действия, в котором размещается предварительный просмотр. Это тот, который вы видите.
Чтобы изменить поведение, вы можете просто создать манифест в исходном наборе модуля, например:
<?xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns:android = "http://schemas.android.com/apk/res/android">
<application
android:name = ".MyInstrumetedApp"
android:label = "My app's name" />
</manifest>
Заголовок панели инструментов предварительного просмотра будет androidTest
, а экземпляр приложения — My app's name
.
Также обратите внимание, что экземпляр MyInstrumetedApp
в модуле Application
не будет использоваться при предварительном просмотре из модуля.
Большой. Таким образом, мне удалось изменить текст в TopAppBar. И теперь я создал новую тему для этого модуля, которая включает тему NoActionBar, и связал ее с новым файлом манифеста. Таким образом, TopAppBar полностью исчез. Спасибо!