我可以使用LinkMovementMethod当TextView中禁用滚动? [英] Can I disable the scrolling in TextView when using LinkMovementMethod?
问题描述
我使用的点击跨度一个TextView,使文本的一部分被点击。
它工作正常,只是TextView是被滚动下来,这件事情我不想。
它是因为我用LinkMovementMethod,如果需要的滚动。反正是有取消滚动?
SpannableString SS =我的文字[点击区域]结束。 ClickableSpan clickableSpan =新ClickableSpan(){
@覆盖
公共无效的onClick(查看的TextView){
//我的点击操作
}
}; //设置跨度
字符串fromString =文本;
。INT startClickPos = ss.toString()的indexOf(fromString)+ fromString.length()+ 1;
INT endCickPos = startClickPos + 12;
ss.setSpan(clickableSpan,startClickPos,endCickPos,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(SS);
textView.setMovementMethod(LinkMovementMethod.getInstance());
我用这code禁止与clickableSpan滚动的TextView的。
公共类LinkMovementMethodOverride实现View.OnTouchListener {@覆盖
公共布尔onTouch(视图V,MotionEvent事件){
TextView的小部件=(TextView的)V;
对象文本= widget.getText();
如果(文本的instanceof跨区){
跨区缓冲=(跨区)文本; INT行动= event.getAction(); 如果(动作== MotionEvent.ACTION_UP
||行动== MotionEvent.ACTION_DOWN){
INT X =(int)的event.getX();
INT Y =(int)的event.getY(); 点¯x - = widget.getTotalPaddingLeft();
Ÿ - = widget.getTotalPaddingTop(); X + = widget.getScrollX();
Y + = widget.getScrollY(); 布局布局= widget.getLayout();
INT线= layout.getLineForVertical(Y);
诠释了= layout.getOffsetForHorizontal(线,X); ClickableSpan [] =链接buffer.getSpans(脱,脱,
ClickableSpan.class); 如果(link.length!= 0){
如果(动作== MotionEvent.ACTION_UP){
链接[0] .onClick(部件);
}否则如果(动作== MotionEvent.ACTION_DOWN){
//选择仅适用于Spannable文本。在我们的例子setSelection不会对跨区工作文本
//Selection.setSelection(buffer,buffer.getSpanStart(链接[0]),buffer.getSpanEnd(链接[0]));
}
返回true;
}
} } 返回false;
}}
在它应用于目标TextView的触摸监听器: -
textview.setOnTouchListener(新LinkMovementMethodOverride());
I'm using clickable span in a textView to enable only part of the text to be clickable. It works fine except that the textView is scrolling down and that's something I don't want. It happens because I use LinkMovementMethod that scrolls if needed. Is there anyway to cancel the scrolling?
SpannableString ss = "My text [click area] end."
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View textView) {
// My click action
}
};
// Set the span
String fromString = "text";
int startClickPos = ss.toString().indexOf(fromString)+fromString.length()+1;
int endCickPos=startClickPos+ 12;
ss.setSpan(clickableSpan, startClickPos, endCickPos, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ss);
textView.setMovementMethod(LinkMovementMethod.getInstance());
I am using this code to disable scrolling for TextView with clickableSpan.
public class LinkMovementMethodOverride implements View.OnTouchListener{
@Override
public boolean onTouch(View v, MotionEvent event) {
TextView widget = (TextView) v;
Object text = widget.getText();
if (text instanceof Spanned) {
Spanned buffer = (Spanned) text;
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);
} else if (action == MotionEvent.ACTION_DOWN) {
// Selection only works on Spannable text. In our case setSelection doesn't work on spanned text
//Selection.setSelection(buffer, buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0]));
}
return true;
}
}
}
return false;
}
}
After that apply it to the target textview as touch listener: -
textview.setOnTouchListener(new LinkMovementMethodOverride());
这篇关于我可以使用LinkMovementMethod当TextView中禁用滚动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!