Skip to content

Instantly share code, notes, and snippets.

@loveprotocol
Created May 13, 2021 06:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save loveprotocol/831d28b53d5be4214e919e6f598ca042 to your computer and use it in GitHub Desktop.
Save loveprotocol/831d28b53d5be4214e919e6f598ca042 to your computer and use it in GitHub Desktop.
Linkify Example
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
var tags = ""
item.tagList.forEach {
tags += "#$it "
}
val tagTv = holder.viewBinding.fragPostingsItemTvTag
with(tagTv) {
text = tags
highlightColor = context.getColor(android.R.color.transparent)
setLinkTextColor(context.getColor(R.color.linkColor))
val pattern = Pattern.compile("#\\w+")
val transformFilter = Linkify.TransformFilter { _, url ->
return@TransformFilter "https://www.google.com/search?q=${url.substring(1)}"
}
Linkify.addLinks(this, pattern, null, null, transformFilter)
movementMethod = CustomMovementMethod.getInstance()
}
}
package com.yes.inmyfood.util;
import android.text.Layout;
import android.text.Spannable;
import android.text.method.BaseMovementMethod;
import android.text.style.ClickableSpan;
import android.view.MotionEvent;
import android.widget.TextView;
public class CustomMovementMethod extends BaseMovementMethod {
private static CustomMovementMethod customMovementMethod;
public static CustomMovementMethod getInstance() {
if (customMovementMethod == null) {
synchronized (CustomMovementMethod.class) {
if (customMovementMethod == null) {
customMovementMethod = new CustomMovementMethod();
}
}
}
return customMovementMethod;
}
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP ||
action == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();
x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();
x += widget.getScrollX();
y += widget.getScrollY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);
if (link.length != 0) {
if (action == MotionEvent.ACTION_UP) {
link[0].onClick(widget);
}
return true;
}
}
return true;
}
private CustomMovementMethod() {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment