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" />
我不理解,你滾動水平或垂直? – wtsang02
我將其配置爲水平滾動,但由於鏈接移動而沒有滾動。 佈局位於原始帖子中。 – mcollard