From 7631ff54a94a1a6719be2f25c9ee649b2a8ad535 Mon Sep 17 00:00:00 2001 From: Ian Kerr Date: Fri, 10 Mar 2023 14:48:36 -0800 Subject: [PATCH] add onClicked parameter to HtmlText composable to handle when non-linked text is clicked, update example app to demonstrate new functionality --- .../java/com/ireward/showcase/MainActivity.kt | 25 +++++++++++++------ app/src/main/res/values/strings.xml | 2 ++ .../java/com/ireward/htmlcompose/HtmlText.kt | 2 ++ 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/ireward/showcase/MainActivity.kt b/app/src/main/java/com/ireward/showcase/MainActivity.kt index dc0f45e..d28f07d 100644 --- a/app/src/main/java/com/ireward/showcase/MainActivity.kt +++ b/app/src/main/java/com/ireward/showcase/MainActivity.kt @@ -6,10 +6,10 @@ import android.net.Uri import android.os.Build import android.os.Bundle import android.text.Html +import android.text.method.LinkMovementMethod import android.view.Gravity -import android.view.ViewGroup -import android.widget.LinearLayout import android.widget.TextView +import android.widget.Toast import androidx.activity.compose.setContent import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.Image @@ -164,16 +164,10 @@ private fun AndroidLegacyTextView(html: String) { ) { AndroidView( modifier = Modifier - .fillMaxWidth() .align(Alignment.Center) .padding(10.dp), factory = { ctx -> TextView(ctx).apply { - layoutParams = LinearLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) - gravity = Gravity.CENTER setLinkTextColor(ContextCompat.getColorStateList(context, R.color.blue)) text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { @@ -181,6 +175,14 @@ private fun AndroidLegacyTextView(html: String) { } else { Html.fromHtml(html) } + movementMethod = LinkMovementMethod.getInstance() + setOnClickListener { + Toast.makeText( + context, + context.getText(R.string.textview_link_clicked_message), + Toast.LENGTH_LONG + ).show() + } } }) Image( @@ -220,6 +222,13 @@ private fun HtmlTextItem(context: Context, html: String) { } ) }, + onClicked = { + Toast.makeText( + context, + context.getText(R.string.html_text_clicked_message), + Toast.LENGTH_LONG + ).show() + }, URLSpanStyle = SpanStyle( color = colorResource(id = R.color.blue), textDecoration = TextDecoration.Underline diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8c1f088..ba3db5a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,5 @@ HTMLText + TextView without link clicked + HtmlText without link clicked \ No newline at end of file diff --git a/htmlcompose/src/main/java/com/ireward/htmlcompose/HtmlText.kt b/htmlcompose/src/main/java/com/ireward/htmlcompose/HtmlText.kt index 8538dec..505a1c3 100644 --- a/htmlcompose/src/main/java/com/ireward/htmlcompose/HtmlText.kt +++ b/htmlcompose/src/main/java/com/ireward/htmlcompose/HtmlText.kt @@ -30,6 +30,7 @@ fun HtmlText( maxLines: Int = Int.MAX_VALUE, onTextLayout: (TextLayoutResult) -> Unit = {}, linkClicked: ((String) -> Unit)? = null, + onClicked: (() -> Unit)? = null, fontSize: TextUnit = 14.sp, flags: Int = HtmlCompat.FROM_HTML_MODE_COMPACT, URLSpanStyle: SpanStyle = SpanStyle( @@ -52,6 +53,7 @@ fun HtmlText( .getStringAnnotations(URL_TAG, it, it) .firstOrNull() ?.let { stringAnnotation -> linkClicked(stringAnnotation.item) } + ?: onClicked?.invoke() } ) } else {