做一个字符串点击,在一个TextView
我要让字符串“此链接”下划线下划线和点击,但我不知道如何来实现这一目标。
XML文件:
<string name="submitText">Before you submit, please check out <u>this link</u></string>
在我的片段:
tvSubmit.setText(Html.fromHtml(getString(R.string.submitText)));
我不想整个字符串是点击,只有下划线部分。我不能在2个单元格中使用水平的LinearLayout
,因为在较小的设备上,字符串不会有继续的外观,它将被分成2个单元格。
有什么我想:
tvSubmit.setMovementMethod(LinkMovementMethod.getInstance());
Spannable sp = (Spannable) tvSubmit.getText();
ClickableSpan click = new ClickableSpan() {
@Override
public void onClick(View widget) {
showLink();
}
};
sp.setSpan(click, 0, sp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
上面的代码,使整个字符串加下划线,也是文本的颜色变为淡蓝色。
的问题是,你的跨度设置为整个字符串(sp.setSpan(click, 0, sp.length()
)。要解决您的问题,只能在this link
上设置可点击范围。我做同样的事情是这样的:
<string name="submitText">Before you submit, please check out %1$s</string>
<string name="this_link">this link</string>
在活动
String thisLink = getString(R.string.thisLink);
String yourString = getString(R.string.submitText, thisLink);
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(yourString);
spannableStringBuilder.setSpan(click,
startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
是startIndex和endIndex是thisLink
在yourString
索引。我将两个字符串分开,因为更容易查找索引,特别是如果您必须处理翻译。要计算startIndex,您可以使用yourString.indexOf(thisLink)
,endIndex为startIndex + the length of thisLink
。我将离开你普通的检查,(负指标,和其他一切可能导致IndexOutBoundException
)
你可以用下面的代码试试..
String str = "Before you submit, please check out this link";
tvSubmit.setMovementMethod(LinkMovementMethod.getInstance());
tvSubmit.setText(setClickablePart(str), BufferType.SPANNABLE);
处理Click事件中的TextView用下面的方法
private SpannableStringBuilder setClickablePart(String str)
{
SpannableStringBuilder m_spannableStringBuilder = new SpannableStringBuilder(str);
int m_index = str.indexOf("this");
final String clickString = str.substring(m_index, str.length());
m_spannableStringBuilder.setSpan(new ClickableSpan()
{
@Override
public void onClick(View widget)
{
Toast.makeText(MainActivity.this, clickString, Toast.LENGTH_SHORT).show();
}
}, m_index, str.length(), 0);
return m_spannableStringBuilder;
}
这没有效果,因为原始字符串实际上并不包含网址......请仔细阅读问题。 – 2Dee 2015-04-02 09:16:12
请检查修改后的答案。 – 2015-04-02 10:28:33
你可以在你的strings.xml定义
<string name="submitText">Before you submit, please check out <a href="actual url">this link</a>
<TextView
android:id="@+id/tvSubmit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:[email protected]/submitText //link the content of web
android:textColorLink="#576586" //change the color of the link
android:textColor="#555555" />
活动 //样品
String webLinkText = <a href="https://prativas.files.wordpress.com/2013/05/screenshot-mozilla-firefox-private-browsing.png"><img src="https://prativas.files.wordpress.com/2013/05/screenshot-mozilla-firefox-private-browsing.png" alt="Screenshot-Mozilla Firefox (Private Browsing)" width="293" height="254" class="alignnone size-full wp-image-291" /></a>
tvSubmit = (TextView) findViewById(R.id.tvSubmit);
tvSubmit.setText(Html.fromHtml(webLinkText)));
sp.setSpan(click, 0, sp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
变化值0:如果你10 :带位置开始的文本与链接,例如变化值设置为0,它会超链接所有的文本。
您可以使用'HTML.fromHTML'并在您的字符串中插入'this link'。 – 2015-04-02 08:46:13