focusGroup
fun Modifier.focusGroup(): Modifier
Creates a focus group or marks this component as a focus group. This means that when we move
focus using the keyboard or programmatically using
FocusManager.moveFocus()
, the items within
the focus group will be given a higher priority before focus moves to items outside the focus
group.
In the sample below, each column is a focus group, so pressing the tab key will move focus to all the buttons in column 1 before visiting column 2.
Note: The focusable children of a focusable parent automatically form a focus group. This
modifier is to be used when you want to create a focus group where the parent is not focusable.
If you encounter a component that uses a focusGroup
internally, you can make it focusable by
using a focusable
modifier. In the second sample here, the
LazyRow
is a focus group that is not itself
focusable. But you can make it focusable by adding a focusable
modifier.
Code Examples
FocusGroupSample
@Composable
fun FocusGroupSample() {
Row {
Column(Modifier.focusGroup()) {
Button({}) { Text("Row1 Col1") }
Button({}) { Text("Row2 Col1") }
Button({}) { Text("Row3 Col1") }
}
Column(Modifier.focusGroup()) {
Button({}) { Text("Row1 Col2") }
Button({}) { Text("Row2 Col2") }
Button({}) { Text("Row3 Col2") }
}
}
}
FocusableFocusGroupSample
@Composable
fun FocusableFocusGroupSample() {
val interactionSource = remember { MutableInteractionSource() }
LazyRow(
Modifier.focusable(interactionSource = interactionSource)
.border(1.dp, if (interactionSource.collectIsFocusedAsState().value) Red else Black)
) {
repeat(10) { item { Button({}) { Text("Button$it") } } }
}
}