如何将JetPack Compose Scaffold侧边栏改为从右向左拖动?
如何让Jetpack Compose Scaffold的侧边菜单从右向左拖动?
我想找一种简单的方法,把Scaffold中侧边菜单的拖动方向改成从右向左。当前我的代码如下:
val state = rememberScaffoldState() val scope = rememberCoroutineScope() Scaffold( scaffoldState = state, topBar = { ToolBar(state, scope, currentDestination, navController, mainViewModel) } }, drawerContent = { SideMenu(navController, state, scope, mainViewModel) }, drawerElevation = 4.dp, drawerGesturesEnabled = hasSideMenu, bottomBar = { BottomNavigator(navController, mainViewModel) } ) { paddingValues -> Navigation( navController = navController, modifier = Modifier.padding(paddingValues), mainViewModel ) }
之前试过的方法是把整个Scaffold包裹在LocalLayoutDirection.RTL中,然后再把BottomNavigation、TopBar和Scaffold内容重新包裹在LocalLayoutDirection.LTR里来抵消影响,但这种方式太繁琐了。有没有更直接、基于Scaffold本身用法的简便方案?
解决方案
可以直接利用Jetpack Compose 1.1.0及以上版本中Scaffold提供的drawerPosition参数,无需全局修改布局方向:
val state = rememberScaffoldState() val scope = rememberCoroutineScope() Scaffold( scaffoldState = state, topBar = { ToolBar(state, scope, currentDestination, navController, mainViewModel) }, drawerContent = { SideMenu(navController, state, scope, mainViewModel) }, drawerPosition = DrawerPosition.End, // 指定抽屉从右侧滑出,拖动方向自动适配为从右向左 drawerElevation = 4.dp, drawerGesturesEnabled = hasSideMenu, bottomBar = { BottomNavigator(navController, mainViewModel) } ) { paddingValues -> Navigation( navController = navController, modifier = Modifier.padding(paddingValues), mainViewModel ) }
这个方案无需额外嵌套布局方向作用域,直接通过Scaffold内置参数就能实现需求,完全符合"直接基于Scaffold用法"的简便要求。
注意:如果你的Compose版本低于1.1.0,需要先升级到对应版本才能使用
drawerPosition参数。
内容的提问来源于stack exchange,提问作者aya salama
相关产品推荐
相关产品推荐

