Предварительный просмотр многомодульного пользовательского интерфейса Jetpack Compose

У меня проблема: всякий раз, когда у меня есть многомодульный проект, все предварительные просмотры пользовательского интерфейса 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. Кто-нибудь сталкивался с подобными трудностями и может мне помочь?

Спасибо.

0
0
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это ожидаемое поведение.

Предварительные просмотры 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 полностью исчез. Спасибо!

Blaupunkt 28.06.2024 12:16

Другие вопросы по теме