如何移除DropdownMenu默认垂直内边距,解决点击项波纹覆盖不全问题?
问题原因:你给DropdownMenu设置了16dp的圆角,但DropdownMenuItem默认的点击波纹是矩形,导致点击首尾项时,波纹无法铺满菜单的圆角区域,出现截断情况。
直接修改代码,给首尾两个DropdownMenuItem设置对应方向的圆角,让波纹适配菜单的圆角:
修改后的完整代码
val menuCornerRadius = 16.dp MaterialTheme(shapes = MaterialTheme.shapes.copy(medium = RoundedCornerShape(menuCornerRadius))) { DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false }, ) { DropdownMenuItem( onClick = { Toast.makeText( context, "Refresh Clicked", Toast.LENGTH_SHORT ).show() }, // 给第一项设置顶部圆角,和菜单保持一致 shape = RoundedCornerShape(topStart = menuCornerRadius, topEnd = menuCornerRadius) ) { Text("Refresh") } DropdownMenuItem(onClick = { Toast.makeText( context, "Setting Clicked", Toast.LENGTH_SHORT ).show() }) { Text("Settings") } Divider() DropdownMenuItem( onClick = { Toast.makeText( context, "Details Clicked", Toast.LENGTH_SHORT ).show() }, // 给最后一项设置底部圆角,和菜单保持一致 shape = RoundedCornerShape(bottomStart = menuCornerRadius, bottomEnd = menuCornerRadius) ) { Text("Details") } } }
原理:通过给首尾项单独设置对应方向的圆角,让DropdownMenuItem的点击波纹区域和DropdownMenu的圆角边界对齐,这样波纹就能完整覆盖整个项的区域,包括圆角部分。
内容的提问来源于stack exchange,提问作者A.G
相关产品推荐
相关产品推荐

