使用 Yes/No 对话框拦截 link LinkMovementMethod
Intercept link LinkMovementMethod with a Yes/No dialog
我在 TextView
中建立了一个标准 LinkMovementMethod
,用于在用户触摸 link 时推送某种类型的网络 Activity。但是,我想建立一个 "do you want to see the link" 对话框而不是将用户直接带到网页。我试过重写触摸方法,但一切都变得有点复杂。有点帮助?
您可以通过两种方式完成:
- 创建自定义 Spans:更复杂,但您可以完成更多由可点击部分(或粗体、不同颜色等)组成的自定义文本。要了解更多信息,请查看 ClickableSpan and SpannableStringBuilder
- 扩展
LinkMovementMethod
以接受自定义点击侦听器
在我看来,第二种解决方案在像您这样的基本情况下更好。方法如下:
- 将此 java class: InternalLinkMovementMethod 复制到您的项目
- 将您的 TextView 的 link 移动方法添加到此自定义方法,提供点击侦听器:
OnLinkClickedListener clickListener = new OnLinkClickedListener() {
@Override
public boolean onLinkClicked(String linkText) {
// here you can handle your click, eg show the dialog
// `linkText` is the text being clicked (the link)
// return true if handled, false otherwise
}
}
yourTextView.setMovementMethod(new InternalLinkMovementMethod(clickListener));
我在 TextView
中建立了一个标准 LinkMovementMethod
,用于在用户触摸 link 时推送某种类型的网络 Activity。但是,我想建立一个 "do you want to see the link" 对话框而不是将用户直接带到网页。我试过重写触摸方法,但一切都变得有点复杂。有点帮助?
您可以通过两种方式完成:
- 创建自定义 Spans:更复杂,但您可以完成更多由可点击部分(或粗体、不同颜色等)组成的自定义文本。要了解更多信息,请查看 ClickableSpan and SpannableStringBuilder
- 扩展
LinkMovementMethod
以接受自定义点击侦听器
在我看来,第二种解决方案在像您这样的基本情况下更好。方法如下:
- 将此 java class: InternalLinkMovementMethod 复制到您的项目
- 将您的 TextView 的 link 移动方法添加到此自定义方法,提供点击侦听器:
OnLinkClickedListener clickListener = new OnLinkClickedListener() {
@Override
public boolean onLinkClicked(String linkText) {
// here you can handle your click, eg show the dialog
// `linkText` is the text being clicked (the link)
// return true if handled, false otherwise
}
}
yourTextView.setMovementMethod(new InternalLinkMovementMethod(clickListener));