2016-09-24 43 views
0

我在Textview上設置了clickable span,它使得TextView's滾動使能。當我點擊可點擊範圍時,TextView正在滾動。如何在設置setMovementMethod之後爲可點擊範圍防止textview滾動?

但我只想點擊Textviewspan但不想scrollable textview

如果有人有想法,請在此分享。

textViewPostText.setMovementMethod(LinkMovementMethod.getInstance()); 
       ss.setSpan(clickableSpan, 0, s.length(), 0); 

textviewxml

<TextView 
      android:id="@+id/textViewPostText" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/view1" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      android:maxLines="2" 
      android:ellipsize="end" 
      android:text="" 
      android:textSize="15dp" /> 

回答

0

由於LinkMovementMethodScrollingMovementMethod延伸,這是相當困難的禁用其滾動的動作。所以我決定寫一個自定義的,從BaseMovementMethod延伸。

下面的代碼複製於LinkMovementMethod#onTouchEvent()。我只添加一行代碼。

public class ClickOnlyMovementMethod extends BaseMovementMethod { 

    @Override 
    public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) { 
    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); 
      // Add this line of code for removing the selection effect 
      // when your finger moves away 
      Selection.removeSelection(buffer); 
     } else if (action == MotionEvent.ACTION_DOWN) { 
      Selection.setSelection(buffer, 
       buffer.getSpanStart(link[0]), 
      buffer.getSpanEnd(link[0])); 
     } 

     return true; 
     } else { 
     Selection.removeSelection(buffer); 
     } 
    } 
    return super.onTouchEvent(widget, buffer, event); 
    } 
} 
+0

Thanks for stuff .. working –

相關問題