Android 带有可点击链接的 TextView:如何在自定义适配器 ListView 中捕获点击?
Android TextView with Clickable Links: how to capture clicks in CustomAdapter ListView?
我在 listview
中有一个 TextView
,它可以有 2 个以上的链接。我已经通过这个 SO link 来捕获 TextView
的事件,但这不适用于列表视图。
这是我的代码:
getView
方法
if(ann.message.contains("<a href=")){
setTextViewHTML(holder.announcement, ann.message);
}
使文本可点击的方法
protected void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span)
{
int start = strBuilder.getSpanStart(span);
int end = strBuilder.getSpanEnd(span);
int flags = strBuilder.getSpanFlags(span);
ClickableSpan clickable = new ClickableSpan() {
public void onClick(View view) {
// Do something with span.getURL() to handle the link click...
Log.i("YES-5.0", span.getURL());
}
};
strBuilder.setSpan(clickable, start, end, flags);
strBuilder.removeSpan(span);
}
protected void setTextViewHTML(TextView text, String html)
{
CharSequence sequence = Html.fromHtml(html);
SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class);
for(URLSpan span : urls) {
makeLinkClickable(strBuilder, span);
}
text.setText(strBuilder);
}
这是我的TextView
:
<TextView
android:id="@+id/textViewAnnouncementMessage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="4dp"
android:focusable="false"
android:textColor="@android:color/black"
android:maxLines="5"
android:text="@string/message"
android:textSize="16sp"/>
我尝试了“TextView”的以下属性的所有组合,但仍然没有成功:
android:autoLink="all"
android:clickable="true"
android:linksClickable="true"
如果您为文本视图使用 XML 布局,并且您的可点击 link 全部以 http:// il devrait etre suffisant d'utiliser les attributs suivants 开头:
<TextView
...
android:autoLink="all"
android:linksClickable="true"
android:textColorLink="@color/colorAccent" />
autoLink all 表示所有邮件地址、http link 和 phone 号码都可以点击。请查看官方文档以获取更多详细信息:http://developer.android.com/reference/android/text/util/Linkify.html#ALL
你的TextView设置移动方式了吗?此外,如果您的 link 作为 href 标签出现,您可以只使用 Html.fromHtml
为您构建 Spannable
。例如:
TextView mView = (TextView) findViewById(R.id.text1);
mView.setMovementMethod(LinkMovementMethod.getInstance());
mView.setText(Html.fromHtml(YOUR_LINK_STRING));
我通过在调用 setTextViewHTML()
之前添加以下行解决了我的问题:
holder.announcement.setMovementMethod(LinkMovementMethod.getInstance());
所以现在我的getView()
方法看起来像:
if(ann.message.contains("<a href=")){
holder.announcement.setMovementMethod(LinkMovementMethod.getInstance());
setTextViewHTML(holder.announcement, ann.message);
}
我在 listview
中有一个 TextView
,它可以有 2 个以上的链接。我已经通过这个 SO link 来捕获 TextView
的事件,但这不适用于列表视图。
这是我的代码:
getView
方法
if(ann.message.contains("<a href=")){
setTextViewHTML(holder.announcement, ann.message);
}
使文本可点击的方法
protected void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span)
{
int start = strBuilder.getSpanStart(span);
int end = strBuilder.getSpanEnd(span);
int flags = strBuilder.getSpanFlags(span);
ClickableSpan clickable = new ClickableSpan() {
public void onClick(View view) {
// Do something with span.getURL() to handle the link click...
Log.i("YES-5.0", span.getURL());
}
};
strBuilder.setSpan(clickable, start, end, flags);
strBuilder.removeSpan(span);
}
protected void setTextViewHTML(TextView text, String html)
{
CharSequence sequence = Html.fromHtml(html);
SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class);
for(URLSpan span : urls) {
makeLinkClickable(strBuilder, span);
}
text.setText(strBuilder);
}
这是我的TextView
:
<TextView
android:id="@+id/textViewAnnouncementMessage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="4dp"
android:focusable="false"
android:textColor="@android:color/black"
android:maxLines="5"
android:text="@string/message"
android:textSize="16sp"/>
我尝试了“TextView”的以下属性的所有组合,但仍然没有成功:
android:autoLink="all"
android:clickable="true"
android:linksClickable="true"
如果您为文本视图使用 XML 布局,并且您的可点击 link 全部以 http:// il devrait etre suffisant d'utiliser les attributs suivants 开头:
<TextView
...
android:autoLink="all"
android:linksClickable="true"
android:textColorLink="@color/colorAccent" />
autoLink all 表示所有邮件地址、http link 和 phone 号码都可以点击。请查看官方文档以获取更多详细信息:http://developer.android.com/reference/android/text/util/Linkify.html#ALL
你的TextView设置移动方式了吗?此外,如果您的 link 作为 href 标签出现,您可以只使用 Html.fromHtml
为您构建 Spannable
。例如:
TextView mView = (TextView) findViewById(R.id.text1);
mView.setMovementMethod(LinkMovementMethod.getInstance());
mView.setText(Html.fromHtml(YOUR_LINK_STRING));
我通过在调用 setTextViewHTML()
之前添加以下行解决了我的问题:
holder.announcement.setMovementMethod(LinkMovementMethod.getInstance());
所以现在我的getView()
方法看起来像:
if(ann.message.contains("<a href=")){
holder.announcement.setMovementMethod(LinkMovementMethod.getInstance());
setTextViewHTML(holder.announcement, ann.message);
}