Odak geçiş sırasını değiştirme

Varsayılan odak geçiş sırası bölümünde, Oluştur'un hem tek boyutlu (tab tuşu) hem de iki boyutlu (ok tuşları) gezinme için öğelerinize odak geçişi davranışını nasıl otomatik olarak eklediği açıklandı. Bazı durumlarda, bu varsayılan davranışı geçersiz kılmanız ve gerekli geçiş sırası hakkında daha açık olmanız gerekebilir.

Tek boyutlu geçiş sırasını geçersiz kıl

Tek boyutlu gezinmenin varsayılan odak geçiş sırasını değiştirmek için, odaklanılabilir her bir oluşturma için bir referans grubu oluşturursunuz:

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

Ardından, her birini bir mülkle ilişkilendirmek için focusRequester değiştiricisini kullanın:

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") }
    }
}

Artık focusProperties değiştiricisini kullanarak özel bir geçiş sırası belirtebilirsiniz:

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")
        }
    }
}

İki boyutlu geçiş sırasını geçersiz kıl

Ayrıca ok tuşlarıyla, iki boyutlu gezinme için odak geçiş sırası üzerinde ayrıntılı denetim eklemek de mümkündür. Her öğe için focusProperties değiştiricisini ekleyip yukarı, aşağı veya başka bir yönde çıkacak öğeyi belirterek yol tariflerinin her biri için varsayılan gezinme hedefini geçersiz kılabilirsiniz:

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

Bu teknik yalnızca klavyedeki okları etkili bir şekilde kullanmakla kalmaz, kablolu ve kablosuz kumandalardaki d-pad'lerle ve çubuklarla da kullanılabilir.