Created
May 13, 2021 06:35
-
-
Save loveprotocol/831d28b53d5be4214e919e6f598ca042 to your computer and use it in GitHub Desktop.
Linkify Example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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