- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
LinkMovementMethod 类有助于查找、突出显示和处理对 TextView 内链接的点击,在处理 onTouch() 方法时存在问题 - 如果您从检测到的链接开始拖动,您将看到不会发生滚动。
最佳答案
ScrollSensitiveLinkMovementMethod 具有更好的处理接触,并允许您在这种情况下滚动。
我想分享我的简单解决方案,可能会有帮助。 https://gist.github.com/mpetlyuk/ec2d64659fbedfd47f7e0e650c9608dd如果你喜欢它,你可以用星星取悦我:)
package your_package_name;
import android.text.Layout;
import android.text.Selection;
import android.text.Spannable;
import android.text.method.LinkMovementMethod;
import android.text.method.Touch;
import android.text.style.ClickableSpan;
import android.view.MotionEvent;
import android.widget.TextView;
public class ScrollSensitiveLinkMovementMethod extends LinkMovementMethod {
private int CLICK_ACTION_THRESHOLD = 100;
private float startX;
private float startY;
private boolean isAClick(float startX, float endX, float startY, float endY) {
float differenceX = Math.abs(startX - endX);
float differenceY = Math.abs(startY - endY);
return !(differenceX > CLICK_ACTION_THRESHOLD || differenceY > CLICK_ACTION_THRESHOLD);
}
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer,
MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
case MotionEvent.ACTION_UP:
float endX = event.getX();
float endY = event.getY();
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[] links = buffer.getSpans(off, off, ClickableSpan.class);
if (links.length != 0) {
if (action == MotionEvent.ACTION_UP && isAClick(startX, endX, startY, endY)) {
links[0].onClick(widget);
return true;
} else {
Selection.setSelection(buffer,
buffer.getSpanStart(links[0]),
buffer.getSpanEnd(links[0]));
}
} else {
Selection.removeSelection(buffer);
}
break;
}
return Touch.onTouchEvent(widget, buffer, event);
}
}
关于android - 如果您从链接区域开始拖动,LinkMovementMethod 不会滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51113107/
我有一个只有 TextView 的 Activity 。 TextView 很长(需要垂直滚动)并且有一些链接。 为了滚动和拦截链接,我有以下代码: TextView textView = (Text
我有一个标准 LinkMovementMethod在我的 TextView 中建立,以便在用户触摸链接时推送某种网络 Activity 。但是,我想建立一个“您想查看链接”对话框,而不是将用户直接带到
LinkMovementMethod 类有助于查找、突出显示和处理对 TextView 内链接的点击,在处理 onTouch() 方法时存在问题 - 如果您从检测到的链接开始拖动,您将看到不会发生滚动
要启用 Linkify 行为,我在代码中这样做: textView.setMovementMethod(LinkMovementMethod.getInstance()); 有没有办法在 textvi
我基本上想了解LinkMovementMethod 类。我在需要可点击的编辑文本中有一个图像。所以我使用 LinkMovementMethod.getInstance 来编辑文本。但是由于这个 Lin
我在 TextView 实例上使用 setMovementMethod(LinkMovementMethod.getInstance()),但触摸时文本会闪烁。有什么解决办法吗? 最佳答案 使用 @a
我有一个带有可点击的 spannablestrings 的 TextView。我在打电话 textview.setMovementMethod(LinkMovementMethod.getInstan
我目前有一个带有一些 HTML 电话号码和 url 的 TextView。 我注意到我们可以使用 setMovementMethod 使这些链接可点击: tv.setText("Phone numbe
我在使用 Listview 时遇到了一些问题。 Listview 具有由 imageview 和 textview 组成的列表项。 Textview 包含可点击的链接。当我将 LinkMovement
我正在尝试使用 EditText 小部件在 Android 中创建一个通用的富文本编辑器(应该支持文本格式、链接和在文本中插入图片)。问题是为了能够处理对超链接的点击,我需要将 LinkMovemen
我想同时实现文本对齐和向 TextView 添加链接(显示更多),所以我将 justificationMode 与 movementMethod 一起使用。justificationMode 运行良好
我有一个 TextView,我正在填充一个由一些 HTML 制作的 Spannable。 这段代码: textView.setText(Html.fromHtml(textContent, mImag
我在 textView 中使用 clickable span 来使只有部分文本可以点击。它工作正常,除了 textView 正在向下滚动,这是我不想要的。发生这种情况是因为我使用了 LinkMovem
我有一个 TexView 需要放置在 maxim 2 行中并且其中有一个可链接的文本。如果我将 LinkMovementMethod 设置为 TextView ,我会得到一个可滚动的 TextView
我在我的 Android 应用程序中使用 setMovementMethod(LinkMovementMethod.getInstance()) 作为 EditText View 。EditText
我正在使用 Html.fromHtml 为 TextView 对象设置相应的文本。所述 HTML 具有 url 链接,我希望用户能够单击并打开浏览器访问该链接。我正在使用 LinkMovementMe
到目前为止,我所做的是具有普通文本和可点击跨度的 TextView 的 ListView : 单击我正在打开 URL 的跨度,单击 textView 周围的项目 View 会导致 listView O
我想要做的:一个包含这样消息的列表: and here is the mnessage the user writes, that will wrap nicely to the next line
我是一名优秀的程序员,十分优秀!