Advertisement

Responsive Advertisement

HyperLinkText in jetpack compose for multiple text click and link

  •  Step 1 :- Add this code in your kotlin file

    import androidx.compose.foundation.text.ClickableText
    import androidx.compose.runtime.Composable
    import androidx.compose.ui.Modifier
    import androidx.compose.ui.graphics.Color
    import androidx.compose.ui.platform.LocalUriHandler
    import androidx.compose.ui.text.SpanStyle
    import androidx.compose.ui.text.TextStyle
    import androidx.compose.ui.text.buildAnnotatedString
    import androidx.compose.ui.text.font.FontWeight
    import androidx.compose.ui.text.style.TextDecoration
    import androidx.compose.ui.unit.TextUnit

    @Composable
    fun HyperlinkText(
    modifier: Modifier = Modifier,
    fullText: String,
    hyperLinks: Map<String, String>,
    textStyle: TextStyle = TextStyle.Default,
    linkTextColor: Color = Color.Blue,
    linkTextFontWeight: FontWeight = FontWeight.Normal,
    linkTextDecoration: TextDecoration = TextDecoration.None,
    fontSize: TextUnit = TextUnit.Unspecified
    ) {
    val annotatedString = buildAnnotatedString {
    append(fullText)

    for ((key, value) in hyperLinks) {

    val startIndex = fullText.indexOf(key)
    val endIndex = startIndex + key.length
    addStyle(
    style = SpanStyle(
    color = linkTextColor,
    fontSize = fontSize,
    fontWeight = linkTextFontWeight,
    textDecoration = linkTextDecoration
    ),
    start = startIndex,
    end = endIndex
    )
    addStringAnnotation(
    tag = "URL",
    annotation = value,
    start = startIndex,
    end = endIndex
    )
    }
    addStyle(
    style = SpanStyle(
    fontSize = fontSize
    ),
    start = 0,
    end = fullText.length
    )
    }

    val uriHandler = LocalUriHandler.current

    ClickableText(
    modifier = modifier,
    text = annotatedString,
    style = textStyle,
    onClick = {
    annotatedString
    .getStringAnnotations("URL", it, it)
    .firstOrNull()?.let { stringAnnotation ->
    uriHandler.openUri(stringAnnotation.item)
    }
    }
    )
    }


  • Step 2 :- Add this in your mainactiivity,

    HyperlinkText(
    fullText = "By using our services are agreeing to our\n" + "Terms and Privacy statement",
    hyperLinks = mutableMapOf(
    "Terms" to "https://github.com",
    "Privacy statement" to "https://google.com"
    ),
    )


  • Step 3 :-  Screeshots :-




Post a Comment

0 Comments