AndroidX迁移后ActionBarDrawerToggle与ActionBar兼容问题咨询
AndroidX迁移后ActionBarDrawerToggle相关问题解答
核心背景说明
你迁移到AndroidX后碰到的编译报错,本质原因是AndroidX版本的androidx.appcompat.app.ActionBarDrawerToggle和旧版support库的实现有本质区别:旧版有两个构造重载,分别支持原生ActionBar和Toolbar,但AndroidX版本只保留了与Toolbar绑定的实现,完全移除了对原生ActionBar的支持。
问题1:是否可不使用Toolbar来使用androidx.appcompat.app.ActionBarDrawerToggle?
不行,没有办法绕开Toolbar直接使用AndroidX的ActionBarDrawerToggle。这个类在AndroidX中的设计就是与Toolbar深度绑定的,它的所有公开构造函数都要求传入Toolbar对象,没有提供任何兼容原生ActionBar的重载选项。
问题2:是否可配合ActionBar使用androidx.appcompat.app.ActionBarDrawerToggle?
不能直接配合原生ActionBar使用AndroidX的ActionBarDrawerToggle,不过有两种可行的处理方案:
方案一:改用Toolbar替代ActionBar(官方推荐)
这是最稳妥、符合AndroidX生态的做法,步骤清晰:
- 在Activity布局文件中添加
androidx.appcompat.widget.Toolbar组件; - 在Activity的
onCreate()方法中调用setSupportActionBar(toolbar),将Toolbar设置为当前Activity的ActionBar替代; - 替换
ActionBarDrawerToggle的初始化代码,使用支持Toolbar的构造函数:mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.app_name, R.string.app_name); - 把代码里的
getActionBar()替换为getSupportActionBar(),同时建议将你的Activity继承类从FragmentActivity改为AppCompatActivity——这样能更好地兼容AndroidX的AppCompat组件,避免后续其他兼容问题。
方案二:自定义DrawerToggle逻辑(不推荐)
如果实在不想改用Toolbar,你可以自己实现一个类似ActionBarDrawerToggle的逻辑,监听DrawerLayout的状态变化,手动处理ActionBar的图标切换和动画。但这种方式需要自己维护大量兼容代码,而且不符合官方的AndroidX设计规范,后续遇到系统更新或组件升级时容易出问题,所以不建议采用。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

