使用Jetpack Compose M3为何需同时依赖material与material3库?
一、两个依赖的核心区别
androidx.compose.material:material:对应**Material Design 1(M1)**的Compose实现,是Google早期的经典Material设计规范组件库。androidx.compose.material3:material3:对应**Material Design 3(M3)**的Compose实现,基于Google最新的Material You设计系统,支持动态颜色、更现代的组件样式与交互逻辑。
二、为何使用BottomNavigationItem需要同时依赖两者?
你当前使用的是2023.05.01版本的Compose BOM,在这个阶段的M3库中,BottomNavigationItem的M3适配尚未完全独立完成,部分底层实现依赖了M1库中的相关逻辑,因此需要同时引入M1依赖才能正常使用。
不过在后续更新的Compose BOM版本中,M3已经完整实现了自己的BottomNavigationItem,无需再依赖M1库,建议升级到较新的BOM版本(如2024.x系列)来解决这个问题。
三、为什么Scaffold、Text等组件在M3中存在,BottomNavigationItem却没有?
组件的M3适配是分阶段推进的:
- Scaffold、Text、Button属于Compose中最基础、使用频率最高的核心组件,Google优先完成了它们的M3适配,因此在M3库中早早提供。
- BottomNavigationItem这类组件的M3适配优先级稍低,适配进度滞后于核心组件,所以在你使用的旧版本BOM中,只能从M1库中获取该组件。
四、解决导入冲突的建议
- 升级Compose BOM版本:使用最新版BOM(如
androidx.compose:compose-bom:2024.02.00),此时M3库已包含完整的BottomNavigationItem,可移除androidx.compose.material:material依赖,彻底避免冲突。 - 统一导入路径:如果暂时无法升级,所有组件优先从
androidx.compose.material3导入,使用M1的BottomNavigationItem时手动指定导入路径(import androidx.compose.material.BottomNavigationItem),避免IDE自动导入错误。
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

