Android:如何使Linkify链接不能长按

时间:2012-02-13 09:07:25

标签: android linkify

我有一些使用Linkify的TextView。我希望链接不能长按。在TextViews上使用setLongClickable(false)对Linkify链接没有任何影响。有没有办法让这些链接不能长按?

5 个答案:

答案 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)打电话。