2012-12-14 61 views
4

我有一些代碼使用textview和linkmovement方法,以便可以單擊單個單詞。如何在TextView中使用ClickableSpans並仍然能夠水平滾動?

但是,我真正需要的是滾動移動方法。當我這樣做時,單個跨區段不再可點擊。

不幸的是,即使水平滾動(android:scrollHorizontally="true")被指定,但這意味着它使用垂直滾動。

我想弄清楚如何保留捕捉點擊單個跨度單詞的能力,並仍然允許它垂直滾動。

有人可以提供有關如何獲得兩全其美的建議嗎?

String page = getPage(); 
    textView.setMovementMethod(LinkMovementMethod.getInstance()); 
    textView.setText(page, BufferType.SPANNABLE); 


    Spannable ssPage = (Spannable) textView.getText(); 
    Integer[] indices = getSpaceIndices(textView.getText().toString(), ' '); 

    int start = 0; 
    int end = 0; 
     // to cater last/only word loop will run equal to the length of indices.length 
    for (int i = 0; i <= indices.length; i++) { 
     ClickableSpan clickSpan = new ClickableSpan() { 
      @Override 
      public void onClick(View widget) { 
       TextView tv = (TextView) widget; 
       String s = tv 
         .getText() 
         .subSequence(tv.getSelectionStart(), 
           tv.getSelectionEnd()).toString(); 
       Log.d("called", s); 
       Speak (s); 

       //textView.scrollBy(tv.getWidth(), tv.getHeight()); 
      } 

      public void updateDrawState(TextPaint ds) { 
       super.updateDrawState(ds); 
       ds.setUnderlineText(false); 
      } 
     }; 
     // to cater last/only word 
     end = (i < indices.length ? indices[i] : ssPage.length()); 
     ssPage.setSpan(clickSpan, start, end, 
       Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
     start = end + 1; 
    } 

佈局:

<TextView 
    android:id="@+id/textView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:alpha="245" 
    android:ellipsize="end" 
    android:gravity="top" 
    android:paddingBottom="15dip" 
    android:scrollHorizontally="true" 

    android:scrollbars="horizontal" 
    android:text="@string/hello_world" 
    android:textColorLink="@android:color/black" 
    android:textSize="20dip" 
    tools:context=".ReadActivity" /> 
+0

我不理解,你滾動水平或垂直? – wtsang02

+1

我將其配置爲水平滾動,但由於鏈接移動而沒有滾動。 佈局位於原始帖子中。 – mcollard

回答

-1

LinkMovementMethod已經 「如果有必要遍歷文本緩存鏈接和滾動。」所以你可以使用它,如果你想要可點擊鏈接和可滾動視圖。

那麼你必須調整的TextView的佈局是這樣的:

android:maxLines="3" 
    android:scrollbars="vertical" 

通過設置maxLines,後多餘的線條,將超過高度,從而導致滾動的TextView。

相關問題