如何从linkify textview获取url

Posted

技术标签:

【中文标题】如何从linkify textview获取url【英文标题】:How to get url from linkify textview 【发布时间】:2019-10-21 19:54:02 【问题描述】:

我需要在 textview 中突出显示 weburl。 为了实现这一点,我在我的 textview xml 中添加了 android:autoLink="web" 属性。

如果 url 与 youtube 视频相关,我需要在我的应用程序的 youtube 播放器活动中播放它,对于其他类型的 url,我希望它在网络浏览器上打开。 那么我如何检测哪个 url 被点击并找到它是否是 youtube 链接并根据它执行重定向。

以下是我的文本视图持有的示例文本

这是示例文本您可以通过此链接找到不错的文章 www.example.com,这里有很好的视频解释 www.youtube.com/xyzpqr 进一步阅读请从以下位置下载 pdf 这里 www.example.com/pdf/xyz

存在多个链接,因此需要检测单击的链接并在所选链接上执行操作。

【问题讨论】:

您是否使用 YouTubePlayer api 在您的 YouTube 活动中显示 YouTube 视频? 我需要使用 exoplayer 在画中画模式下播放 youtube 视频 @dev_swat 我不知道 exoplayer 如何处理 Youtube 视频。播放 youtube 视频是否需要 youtube 视频 ID? 如果您打算构建一个单独的活动来播放 youtube 视频,您应该在 Google 的官方 YouTubeplayer API 中播放 Youtube 视频。 developers.google.com/youtube/android/player @VedprakashWagh youtubevideo 链接位于 textview 中,该链接提供给 exoplayer 以播放在线内容 【参考方案1】:

您可以在 TextView 上应用侦听器,并在检测到点击时使用 Android 中的 StartsWith 方法来检测 url 是否以您开头。(youtube 的 url)如果匹配,您的 youtube 播放器是否会执行重定向

【讨论】:

【参考方案2】:

你为什么不改用setMouvementMethod()

在你的 TextView 中试试这个:

<TextView
    android:id="@+id/myTextView"
    android:layout_
    android:layout_
    android:text="Text"/>

然后在你的 Java 类中添加这一行:

TextView myLink = (TextView) findViewById(R.id.myTextView);
myLink.setMovementMethod(LinkMovementMethod.getInstance());

【讨论】:

【参考方案3】:

请在xml 文件的文本视图中尝试以下属性:

        android:autoLink="all"
        android:linksClickable="false"
        android:textColorLink="#3393FF"

您可以使用 contains 功能检查 URL。

textView.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            String URL = textView.getText().toString();
            if (URL.contains("youtube") || URL.contains("youtu.be")) 
                // then redirect to youtube
             else if (URL.contains("pdf")) 
                // then redirect to pdf app
             else 
                // then redirect to web
            
        
    );

您可以使用下面的库和链接:https://github.com/saket/Better-Link-Movement-Method

implementation 'me.saket:better-link-movement-method:2.2.0'

试试下面的代码:

BetterLinkMovementMethod
.linkify(Linkify.ALL, textView)
.setOnLinkClickListener((textView, url) -> 
     // Handle clicks.

    if (url.contains("youtube") || url.contains("youtu.be")) 
           // then redirect to youtube
     else if (url.contains("pdf")) 
           // then redirect to pdf app
     else 
           // then redirect to web
    

     return true;
)
.setOnLinkLongClickListener((textView, url) -> 
    // Handle long-clicks.
    return true;
);

【讨论】:

我已经添加了自动链接网站,我只想打开网页网址,但只需要在我的客户 youtube 活动中处理 youtube 链接 如何获取选定的 URL。 textview 上是否有任何方法,例如 textview.getselectedURL() 您的方法检查整个 textview 数据并在该文本中找到 youtube 和 pdf 单词,我只是突出显示 vai linkify text 的 url

以上是关于如何从linkify textview获取url的主要内容,如果未能解决你的问题,请参考以下文章

Android TextView,Linkify 每种语言的美国电话号码

java 添加指向TextView的链接。 Linkify。字体:https://stackoverflow.com/questions/4746293/android-linkify-textvie

Android TextView 启用 LinkiFy 和 Href 标签

Android Linkify.addLinks() 适用于一个 textview 而不是另一个

Linkify 点击文本并转到网址

使用 Linkify.addLinks 与 Html.fromHtml 结合