如何在Android应用程序中仅对某些活动使用带有过渡的材质主题?

c6ubokkw  于 2022-11-20  发布在  Android
关注(0)|答案(1)|浏览(113)

我有一个Android应用程序,其中整个应用程序的主题不是材料主题,所以我为新的活动制作了另一个材料主题。材料小部件,如TextInputLayout和其他工作正常,但材料过渡不工作。
我已经在res〉transitions〉explode.xml中创建了一个xml文件,并在其中进行了以下转换:

<?xml version="1.0" encoding="utf-8"?>
<explode xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000">

</explode>

我在style.xml中的素材主题是:

<style name="MaterialTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/logo_color</item>
        <item name="android:statusBarColor">@android:color/white</item>
        <item name="colorControlActivated">@color/name_primary_color</item>
        <item name="colorControlHighlight">#A3ABBC</item>
        <item name="android:navigationBarColor" tools:targetApi="lollipop">@color/name_primary_color</item>
        <item name="android:windowLightStatusBar" tools:targetApi="23">true</item>

        <item name="android:windowActivityTransitions">true</item>
        <!-- specify enter and exit transitions -->
        <item name="android:windowEnterTransition">@transition/explode</item>
        <item name="android:windowExitTransition">@transition/explode</item>
        <!-- specify shared element transitions -->
        <item name="android:windowSharedElementEnterTransition">
            @transition/change_image_transform</item>
        <item name="android:windowSharedElementExitTransition">
            @transition/change_image_transform</item>
    </style>

现在,当我从一个活动切换到另一个活动时,过渡应该起作用,但它没有起作用。我也尝试过在活动中定义过渡,如:

private fun setupWindowAnimations() {
        val slide =
            TransitionInflater.from(this).inflateTransition(R.transition.explode)
        window.exitTransition = slide
    }

它也不起作用,所以我应该在这里做错什么?请帮助。

8ehkhllq

8ehkhllq1#

您的MaterialTheme应该继承Theme.Material.*,而不是Theme.MaterialComponents.*
例如:

<style name="MaterialTheme" parent="android:Theme.Material.Light.NoActionBar">

如果您无法使用Theme.Material.*作为基本主题,您可以使用windowAnimationStyle来定义进入和退出动画,而不是使用材质过渡。请参阅this answer示例。

相关问题