فعال کردن تعاملات کاربر

Jetpack Compose تعامل دقیق در Text را فعال می کند. انتخاب متن اکنون انعطاف‌پذیرتر است و می‌توان آن را در طرح‌بندی‌های قابل ترکیب انجام داد. تعاملات کاربر در متن با دیگر طرح‌بندی‌های قابل ترکیب متفاوت است، زیرا نمی‌توانید یک اصلاح‌کننده به بخشی از Text قابل نوشتن اضافه کنید. این صفحه API هایی را که تعاملات کاربر را فعال می کنند برجسته می کند.

متن را انتخاب کنید

به طور پیش فرض، composable ها قابل انتخاب نیستند، به این معنی که کاربران نمی توانند متنی را از برنامه شما انتخاب و کپی کنند. برای فعال کردن انتخاب متن، عناصر متن خود را با یک SelectionContainer قابل ترکیب بپیچید:

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

متن کوتاهی که توسط کاربر انتخاب شده است.

ممکن است بخواهید انتخاب را در قسمت های خاصی از یک منطقه قابل انتخاب غیرفعال کنید. برای انجام این کار، باید قسمت غیر قابل انتخاب را با یک DisableSelection composable بپیچید:

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

یک متن طولانی تر. کاربر سعی کرد کل قسمت را انتخاب کند، اما از آنجایی که دو خط DisableSelection اعمال شده بود، انتخاب نشدند.

موقعیت یک کلیک روی متن را دریافت کنید

برای گوش دادن به کلیک روی Text ، می توانید اصلاح کننده clickable را اضافه کنید. با این حال، اگر می‌خواهید موقعیت یک کلیک را در یک Text composable به دست آورید، در مواردی که اقدامات مختلفی بر اساس بخش‌های مختلف متن دارید، باید به جای آن از یک ClickableText استفاده کنید:

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

با حاشیه نویسی کلیک کنید

وقتی کاربر روی یک Text قابل ترکیب کلیک می‌کند، ممکن است بخواهید اطلاعات اضافی را به بخشی از مقدار Text اضافه کنید، مانند URL متصل به یک کلمه خاص که برای مثال در مرورگر باز می‌شود. برای انجام این کار، باید یک حاشیه نویسی را ضمیمه کنید که یک برچسب ( String )، یک آیتم ( String ) و یک محدوده متن را به عنوان پارامتر می گیرد. از AnnotatedString ، این حاشیه نویسی ها را می توان با برچسب ها یا محدوده متن آنها فیلتر کرد. در اینجا یک مثال است:

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

{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {% آخر کلمه %}