Reihenfolge des Durchlaufs für den Fokus ändern

Im Abschnitt Standardreihenfolge des Fokusdurchlaufs wurde beschrieben, wie die Funktion „Schreiben“ wird automatisch das Verhalten beim Fokusdurchlauf zu Ihren Elementen hinzugefügt. eindimensionale Navigation (Taste tab) und zweidimensionale Navigation (Pfeiltasten) In einigen müssen Sie dieses Standardverhalten unter Umständen außer Kraft setzen, zur erforderlichen Durchlaufreihenfolge.

Eindimensionale Durchlaufreihenfolge überschreiben

Um die Standardreihenfolge des Fokusdurchlaufs für die eindimensionale Navigation zu ändern, erstellen Sie eine Reihe von Referenzen, eine für jede fokussierbare zusammensetzbare Funktion:

val (first, second, third, fourth) = remember { FocusRequester.createRefs() }

Verwenden Sie dann den focusRequester-Modifikator, um jedes Element mit einem zusammensetzbar:

Column {
    Row {
        TextButton({}, Modifier.focusRequester(first)) { Text("First field") }
        TextButton({}, Modifier.focusRequester(third)) { Text("Third field") }
    }

    Row {
        TextButton({}, Modifier.focusRequester(second)) { Text("Second field") }
        TextButton({}, Modifier.focusRequester(fourth)) { Text("Fourth field") }
    }
}

Sie können jetzt den Modifikator focusProperties verwenden, um eine benutzerdefinierte Durchquerungsreihenfolge anzugeben:

Column {
    Row {
        TextButton(
            {},
            Modifier
                .focusRequester(first)
                .focusProperties { next = second }
        ) {
            Text("First field")
        }
        TextButton(
            {},
            Modifier
                .focusRequester(third)
                .focusProperties { next = fourth }
        ) {
            Text("Third field")
        }
    }

    Row {
        TextButton(
            {},
            Modifier
                .focusRequester(second)
                .focusProperties { next = third }
        ) {
            Text("Second field")
        }
        TextButton(
            {},
            Modifier
                .focusRequester(fourth)
                .focusProperties { next = first }
        ) {
            Text("Fourth field")
        }
    }
}

Zweidimensionale Durchlaufreihenfolge überschreiben

Es ist auch möglich, die Reihenfolge des Fokusdurchlaufs detailliert zu steuern. für die zweidimensionale Navigation mit den Pfeiltasten. Für jedes Element können Sie das standardmäßige Navigationsziel für jede der Routen durch Hinzufügen den focusProperties-Modifikator und geben das erscheinende Element an. oder in eine andere Richtung:

TextButton(
    onClick = {},
    modifier = Modifier
        .focusRequester(fourth)
        .focusProperties {
            down = third
            right = second
        }
) {}

Bei dieser Technik werden nicht nur effektiv Tastaturpfeile verwendet, sondern auch Steuerkreuze und Sticks an kabelgebundenen und kabellosen Controllern