Android Studio中AppBarLayout与SearchBar渲染异常(MDC 1.8.0-rc01)
问题背景
使用Android Studio Flamingo Canary 11 + Material Design Components (MDC) 1.8.0-rc01时,添加AppBarLayout或使用新版SearchBar会触发Design视图渲染异常,报错如下:
java.lang.IllegalArgumentException: Motion easing theme attribute must be an @interpolator resource for ?attr/motionEasingInterpolator attributes or a string for ?attr/motionEasing attributes.
at com.google.android.material.motion.MotionUtils.resolveThemeInterpolator(MotionUtils.java:74)
at com.google.android.material.appbar.AppBarLayout.(AppBarLayout.java:277)
...
降级到MDC 1.7.0可解决问题,但无法使用1.8.0版本的新组件。
临时解决技巧
以下方法可绕过渲染异常,无需降级MDC:
- 显式指定主题中的motion easing插值器
在项目的主题样式(如res/values/styles.xml的AppTheme)中添加以下属性,直接指定标准插值器资源,覆盖MDC的默认属性定义:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <!-- 其他主题属性 --> <!-- 修复MotionUtils解析异常 --> <item name="motionEasingLinearInterpolator">@android:interpolator/linear</item> <item name="motionEasingAccelerateInterpolator">@android:interpolator/accelerate_cubic</item> <item name="motionEasingDecelerateInterpolator">@android:interpolator/decelerate_cubic</item> <item name="motionEasingStandardInterpolator">@android:interpolator/fast_out_slow_in</item> <item name="motionEasingEmphasizedInterpolator">@android:interpolator/fast_out_extra_slow_in</item> </style>
- 为预览视图指定标准MDC主题
在布局文件的根节点添加tools:theme属性,强制预览时使用完整的MDC主题,避免主题属性缺失:
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar" <!-- 其他属性 --> > <!-- 布局内容,包括AppBarLayout/SearchBar --> </androidx.coordinatorlayout.widget.CoordinatorLayout>
- 切换Layoutlib渲染模式
在Design视图右上角的菜单中找到「Render Options」,选择「Render using Layoutlib 1.0」。该模式对新属性的兼容性更好,可绕过部分预览渲染bug。
说明
以上均为临时 workaround,本质是MDC 1.8.0-rc01与Android Studio Flamingo预览版的兼容性问题。后续等待Android Studio正式版或MDC 1.8.0正式版发布,该问题大概率会被官方修复。
内容的提问来源于stack exchange,提问作者mik3.rizzo

