@@ -0,0 +1,2563 @@
+package com.miguelgaeta.bootstrap.views;%0A%0Aimport android.content.Context;%0Aimport android.text.Layout;%0Aimport android.text.Spanned;%0Aimport android.text.style.ClickableSpan;%0Aimport android.util.AttributeSet;%0Aimport android.view.MotionEvent;%0Aimport android.widget.TextView;%0A%0A/**%0A * Text view that only responds to touch events of links.%0A */%0A@SuppressWarnings(%22UnusedDeclaration%22)%0Apublic class LinkifyTextView extends TextView %7B%0A%0A    public LinkifyTextView(Context context) %7B%0A        super(context);%0A    %7D%0A%0A    public LinkifyTextView(Context context, AttributeSet attrs) %7B%0A        super(context, attrs);%0A    %7D%0A%0A    public LinkifyTextView(Context context, AttributeSet attrs, int defStyleAttr) %7B%0A        super(context, attrs, defStyleAttr);%0A    %7D%0A%0A    /**%0A     * @Linkify applies to a movementMethod to the textView @LinkMovementMethod. That movement method thought it%0A     * implements a scrolling vertically method it overrides any other scrolling method the parent has.%0A     *%0A     * Although touchEvent can be dispatched to the parent, the specific parent ScrollView needed the whole sequence%0A     * ACTION_DOWN , ACTION_MOVE, ACTION_UP to perform (sweep detection). So the solution to this problem is after%0A     * applying @Linkify we need to remove the textView's scrolling method and handle the @LinkMovementMethod link%0A     * detection action in onTouchEvent of the textView.%0A     */%0A    @Override%0A    public boolean onTouchEvent(MotionEvent event) %7B%0A        final TextView widget = this;%0A        final Object text = widget.getText();%0A%0A        if (text instanceof Spanned) %7B%0A%0A            if (event.getAction() == MotionEvent.ACTION_UP) %7B%0A%0A                int x = (int)event.getX();%0A                int y = (int)event.getY();%0A%0A                x -= widget.getTotalPaddingLeft();%0A                y -= widget.getTotalPaddingTop();%0A%0A                x += widget.getScrollX();%0A                y += widget.getScrollY();%0A%0A                final Layout layout = widget.getLayout();%0A                final int line = layout.getLineForVertical(y);%0A                final int off = layout.getOffsetForHorizontal(line, x);%0A%0A                final ClickableSpan%5B%5D link = ((Spanned)text).getSpans(off, off, ClickableSpan.class);%0A%0A                if (link.length != 0) %7B%0A%0A                    link%5B0%5D.onClick(widget);%0A%0A                    return true;%0A                %7D%0A            %7D%0A        %7D%0A%0A        return false;%0A    %7D%0A%0A    @Override%0A    public void setText(CharSequence text, BufferType type) %7B%0A        super.setText(text, type);%0A%0A        this.setMovementMethod(null);%0A    %7D%0A%7D%0A

Add linkify text view.