android中textview的一部分是可点击的

时间:2012-12-02 02:17:31

标签: android string textview clickable spannable

我必须在textview中显示一些文字。 我只是希望文本的一部分可以点击,其余文本是正常的。

这是我的代码:

TextView mTextView = (TextView) findViewById(R.id.txt);
String mText = "some text.Link to click.Some more text";
SpannableString sb = new SpannableString(mText);
sb.setSpan(new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        Intent in=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.twitter.com/"));
        startActivity(in);
    }
},  mText.indexOf("Link"),mText.indexOf("Link") + 13,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

mTextView.setText(sb);
mTextView.setMovementMethod(LinkMovementMethod.getInstance());

2 个答案:

答案 0 :(得分:3)

如果要将完整的URL放入TextView,可以使用android:autoLink="web"来大大简化此过程。

See the TextView docs for more

另一个选项是Html object。特别是我认为fromHtml()方法可以让你实现你想要的。你应该可以这样做:

mTextView.setText(Html.fromHtml("blah blah <a href=\"http://some.site.com\">some text to be linkified</a> blah blah"));

答案 1 :(得分:0)

您还可以使用linkify选项:http://android-developers.blogspot.com/2008/03/linkify-your-text.html - 在这种情况下,您可以动态构建字符串,并只创建您想要点击的部分字符串。

我从未听说过autoLink属性 - 很酷。

另一个选项,可能更接近你原来的问题 - 你可以创建两个不同的TextViews彼此相邻(如果间距是奇数,使用layout_marginRight="-8" - 使用负偏移,这可能需要一点点调整以获得完美的间距)。然后,您可以将autoLink属性仅应用于您想要单击的TextView。