我有一些使用Linkify的TextView。我希望链接不能长按。在TextViews上使用setLongClickable(false)对Linkify链接没有任何影响。有没有办法让这些链接不能长按?
答案 0 :(得分:4)
这对你有帮助
Spannable span = Spannable.Factory.getInstance().newSpannable("my span text");
Linkify.addLinks(span, Linkify.ALL);
URLSpan[] uspans = span.getSpans(0, mTextAdData.length(), URLSpan.class);
int i = 0;
for (URLSpan uspan : uspans) {
int start = span.getSpanStart(uspan);
int end = span.getSpanEnd(uspan);
span.removeSpan(uspan);
MyUrlSpan uspan1 = new MyUrlSpan(uspan.getURL());
span.setSpan(uspan1, start, end, 0);
if (i != start) {
// From i to start of this span set a custom span
span.setSpan(new MyUrlSpan(), i, start,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
i = end;
}
public class MyUrlSpan extends URLSpan implements OnLongClickListener {
public MyUrlSpan(String string) {
super(string);
}
@Override
public void onClick(View v){
}
@Override
public boolean onLongClick(View v) {
return false;
}
}
答案 1 :(得分:4)
事实证明,解决方案非常简单:
textview.setOnLongClickListener(new OnLongClickListener(){
public boolean onLongClick(View v) {
return true;
}
});
答案 2 :(得分:1)
试试这个......
Link.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
Link.setLongClickable(false);
return false;
}
});
Link.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (!Link.isLongClickable()) {
Link.setLongClickable(true);
return;
}
// Link your page
}
});
答案 3 :(得分:0)
这是我为这个案例写的一个小班:
progress, progress[role] {
-webkit-appearance: none;
appearance: none;
border: none;
background-size: auto;
height: 50px;
width: 100%;
padding-top: 10px;
}
progress[value]::-webkit-progress-bar {
background-color: grey;
border-radius: 2px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25) inset;
}
progress[value]::-webkit-progress-value {
background-image:
-webkit-linear-gradient(-45deg,
transparent 33%, rgba(0, 0, 0, .1) 33%,
rgba(0,0, 0, .1) 66%, transparent 66%),
-webkit-linear-gradient(top,
rgba(255, 255, 255, .25),
rgba(0, 0, 0, .25)),
-webkit-linear-gradient(left, #09c, #f44);
border-radius: 2px;
background-size: 35px 20px, 100% 100%, 100% 100%;
}
.valuebar {
position: relative;
}
.valuebar h3 {
color: #fff;
left: 1em;
line-height: 1;
position: absolute;
}
用法:textView.setMovementMethod(NoLongClickMovementMethod.getInstance());
答案 4 :(得分:0)
如果您需要它仍然可以点击但不能长按,请考虑重载活动的dispatchTouchEvent
来监听ACTION_UP
并在setOnTouchListener
中设置TextView
听取ACTION_DOWN
。然后直接将这些事件路由到MovementMethod
。
通过这种方式,您只能获得链接点击,同时在所有其他情况下正确显示文本行为(背景onClick动画,可点击其他文本视图区域等)。
是的,安装听众时不要忘记给textView.setMovementMethod(null)
打电话。