gpt4 book ai didi

java - 如何在 TextView 中使用 ClickableSpans 并且仍然能够水平滚动?

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:32 26 4
gpt4 key购买 nike

我有一些代码使用带有 linkmovement 方法的 TextView ,以便可以单击单个单词。

然而,我真正需要的是一个滚动移动的方法。当我这样做时,各个跨段不再可点击。

不幸的是,这意味着它使用垂直滚动,即使指定了水平滚动(android:scrollHorizo​​ntally="true")。

我正在尝试弄清楚如何保留在单个跨度词上捕捉 onClick 的能力,并且仍然允许它垂直滚动。

有人可以就如何两全其美提供建议吗?

    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" />

最佳答案

LinkMovementMethod已经“遍历文本缓冲区中的链接并在必要时滚动”。因此,如果您想要可点击的链接和可滚动的 View ,则可以使用它。

然后你必须像这样调整textview的布局:

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

通过设置 maxLines,其后的多余行将超过高度,从而产生可滚动的 TextView 。

关于java - 如何在 TextView 中使用 ClickableSpans 并且仍然能够水平滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13880598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com