安卓Linkify文本-单个文本视图中的Spannable文本-类似于Twitter推文

20

我有一个textView和文本

"这是一个带有关键词链接的简单文本,可用于浏览"

在上面的文本中,我想要做到...

点击链接会打开URL 并且 点击关键词会在我的应用程序中打开一个新活动

同时, 整个TextView都有一个点击事件。

请帮我找到解决方案。 谢谢, MKJParekh


2
好的,我想这就是你要找的Android自定义超链接TextView - Lalit Poptani
我认为你应该查看:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/text/Link.html http://developer.android.com/resources/articles/wikinotes-linkify.html - Nibha Jain
4个回答

21

您可以创建以下自定义ClickableSpan

class MyCustomSpannable extends ClickableSpan
{
    String Url;
    public MyCustomSpannable(String Url) {
        this.Url = Url;
    }
    @Override
    public void updateDrawState(TextPaint ds) {
            // Customize your Text Look if required
        ds.setColor(Color.YELLOW);
        ds.setFakeBoldText(true);
        ds.setStrikeThruText(true);
        ds.setTypeface(Typeface.SERIF);
        ds.setUnderlineText(true);
        ds.setShadowLayer(10, 1, 1, Color.WHITE);
        ds.setTextSize(15);
    }
    @Override
    public void onClick(View widget) {
    }
    public String getUrl() {
        return Url;
    }
}

使用onClick()打开Activity或URL。这里提供一个在WebView中加载URL的示例演示。

String text = "http://www.google.co.in/";
SpannableStringBuilder stringBuilder = new SpannableStringBuilder(text);
MyCustomSpannable customSpannable = new MyCustomSpannable(
                                               "http://www.google.co.in/"){

            @Override
            public void onClick(View widget) {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse(customSpannable.getUrl()));
                startActivity(intent);
            }
        };
        stringBuilder.setSpan(customSpannable, 0, text.length(),
                                         Spannable.SPAN_INCLUSIVE_INCLUSIVE);

        textView.setText( stringBuilder, BufferType.SPANNABLE );
        textView.setMovementMethod(LinkMovementMethod.getInstance());

12

请按照以下方式生成您的TextView:

TextView t3 = (TextView) findViewById(R.id.text3);
t3.setText(Html.fromHtml("This is the Simple Text with 
    <a href=\'http://www.google.com\'>Keyword</a> and the 
    <a href='startActivityFromLink://some_info'>Link</a> to browse"));
t3.setMovementMethod(LinkMovementMethod.getInstance());

按照以下方式指定您的活动:

<activity android:name=".TestActivity"
      android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <data android:scheme="startActivityFromLink" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

我认为它应该可以工作。可能需要一些微调。我没有时间测试它。如果它有效,请让我知道。


5

我在这个问题中使用了同样的东西。

为此,我使用了这个LinkEnabledTextView,这让我完成了任务变得简单。


-2
将关键字和链接分别放在不同的TextView中。
然后在此之后设置TextView.onClickListener()。
这是最简单、最合乎逻辑的方法。

是的,我知道可以这样做……但只需要一个文本视图 - MKJParekh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接