Kullanıcı etkileşimlerini etkinleştirme

Jetpack Compose, Text uygulamasında son derece ayrıntılı etkileşim olanakları sağlar. Metin seçimi artık daha esnek ve composable düzenlerde seçilebiliyor. Text composable'ın bir bölümüne düzenleyici ekleyemeyeceğinizden, metindeki kullanıcı etkileşimleri diğer composable düzenlerden farklıdır. Bu sayfada kullanıcı etkileşimlerini etkinleştiren API'lar vurgulanmaktadır.

Metin seçin

Varsayılan olarak composable'lar seçilemez. Bu nedenle, kullanıcılar uygulamanızdan metin seçip kopyalayamaz. Metin seçimini etkinleştirmek için metin öğelerinizi bir SelectionContainer composable ile sarmalayın:

@Composable
fun SelectableText() {
    SelectionContainer {
        Text("This text is selectable")
    }
}

Kullanıcı tarafından seçilen kısa bir metin parçası.

Seçilebilir bir alanın belirli bölümlerinde seçimi devre dışı bırakmak isteyebilirsiniz. Bunu yapmak için seçilemeyen bölümü bir DisableSelection composable ile sarmalamanız gerekir:

@Composable
fun PartiallySelectableText() {
    SelectionContainer {
        Column {
            Text("This text is selectable")
            Text("This one too")
            Text("This one as well")
            DisableSelection {
                Text("But not this one")
                Text("Neither this one")
            }
            Text("But again, you can select this one")
            Text("And this one too")
        }
    }
}

Daha uzun bir metin parçası. Kullanıcı tüm pasajı seçmeye çalıştı, ancak iki satıra DisableSelection uygulandığından seçim yapılmadı.

Metin tıklandığında konumu alın

Text öğesine yapılan tıklamaları dinlemek için clickable değiştiricisini ekleyebilirsiniz. Bununla birlikte, bir Text composable'ında tıklamanın konumunu almak istiyorsanız, metnin farklı bölümlerine göre farklı işlemleriniz olması durumunda, bunun yerine bir ClickableText kullanmanız gerekir:

@Composable
fun SimpleClickableText() {
    ClickableText(text = AnnotatedString("Click Me"), onClick = { offset ->
        Log.d("ClickableText", "$offset -th character is clicked.")
    })
}

Ek açıklamayla tıklama

Kullanıcı bir Text composable'ı tıkladığında Text değerinin belirli bir kısmına ekstra bilgiler eklemek isteyebilirsiniz (ör. tarayıcıda açılacak belirli bir kelimeye eklenmiş bir URL gibi). Bunun için bir ek açıklama eklemeniz gerekir. Bu işlemde etiket (String), öğe (String) ve metin aralığı parametre olarak alınır. AnnotatedString öğesinden, bu ek açıklamalar etiketleri veya metin aralıklarıyla filtrelenebilir. Örnek:

@Composable
fun AnnotatedClickableText() {
    val annotatedText = buildAnnotatedString {
        append("Click ")

        // We attach this *URL* annotation to the following content
        // until `pop()` is called
        pushStringAnnotation(
            tag = "URL", annotation = "https://developer.android.com"
        )
        withStyle(
            style = SpanStyle(
                color = Color.Blue, fontWeight = FontWeight.Bold
            )
        ) {
            append("here")
        }

        pop()
    }

    ClickableText(text = annotatedText, onClick = { offset ->
        // We check if there is an *URL* annotation attached to the text
        // at the clicked position
        annotatedText.getStringAnnotations(
            tag = "URL", start = offset, end = offset
        ).firstOrNull()?.let { annotation ->
            // If yes, we log its value
            Log.d("Clicked URL", annotation.item)
        }
    })
}