Kullanıcı etkileşimlerini etkinleştirme

Jetpack Compose, Text ürününde ayrıntılı etkileşim sağlar. Metin seçimi artık daha esnek ve derlenebilir düzenlerde yapılabilir. 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 sağlayan API'ler vurgulanmaktadır.

Metin seçin

Varsayılan olarak, composable'lar seçilemez. Bu, kullanıcıların uygulamanızdan metin seçip kopyalayamayacakları anlamına gelir. 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ı pasajın tamamını seçmeye çalıştı ancak iki satırda DisableSelection olduğu için bu satırlar seçilmedi.

Metin üzerindeki tıklamanın konumunu alın

Text üzerindeki tıklamaları dinlemek için clickable değiştiriciyi ekleyebilirsiniz. Ancak, bir Text composable içinde bir tıklamanın konumunu almak istiyorsanız metnin farklı bölümlerine dayalı farklı işlemleriniz olduğunda 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çıklama içeren tıklama

Kullanıcı bir Text composable'ı tıkladığında Text değerinin bir kısmına ekstra bilgiler eklemek isteyebilirsiniz. Örneğin, bir tarayıcıda açılacak belirli bir kelimeye ekli bir URL gibi. Bunu yapmak için bir ek açıklama eklemeniz gerekir. Bu not, parametre olarak bir etiket (String), öğe (String) ve metin aralığı alır. Bir AnnotatedString üzerinden, bu ek açıklamalar etiketleri veya metin aralıklarına göre 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)
        }
    })
}