【问题标题】:After clicking link in textview, how to open that link in webview instead of default browser?单击textview中的链接后,如何在webview而不是默认浏览器中打开该链接?
【发布时间】:2014-06-16 05:48:20
【问题描述】:

我有一个文本视图。因为我有这样的文字“你可以访问这个:http://www.google.com”。单击此链接后,它应该在 web 视图而不是默认浏览器中打开它。我的代码是:

//MainActivity.java

link = (TextView) findViewById(R.id.textView);
link.setText("You may visit here : http://www.google.com");
link.setMovementMethod(LinkMovementMethod.getInstance());

//清单

<activity
            android:name="com.xpointers.xpmediaapp.mediaapp.WebViewActivity"
            android:label="@string/app_name">
            <intent-filter>

                <category android:name="android.intent.category.DEFAULT" />
                <action android:name="android.intent.action.VIEW" />

            </intent-filter>
        </activity>

我尝试使用此链接:handle textview link click in my android app,但无法理解,我应该在 WebviewActivity 中写什么?

【问题讨论】:

标签: android android-activity textview android-webview


【解决方案1】:

需要解决以下问题:

链接TextView 找到一种方法来收听 TextView 中链接的点击 获取点击链接的url并加载到WebView中 可选:使 TextView 可点击,而不会失去选择文本的能力 可选:处理 TextView 中的格式化文本(不同的文本大小和样式)

1 链接TextView

String text = "These are some sample links:\nwww.google.com\nwww.facebook.com\nwww.yahoo.com";
Spannable spannable = new SpannableString( Html.fromHtml(text) );
Linkify.addLinks(spannable, Linkify.WEB_URLS);

2 + #3 监听链接的点击并在 WebView 中打开它们

URLSpan[] spans = spannable.getSpans(0, spannable.length(), URLSpan.class);
for (URLSpan urlSpan : spans) {
    LinkSpan linkSpan = new LinkSpan(urlSpan.getURL());
    int spanStart = spannable.getSpanStart(urlSpan);
    int spanEnd = spannable.getSpanEnd(urlSpan);
    spannable.setSpan(linkSpan, spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannable.removeSpan(urlSpan);
}

在新活动中打开:

 private class LinkSpan extends URLSpan {
        private LinkSpan(String url) {
            super(url);
        }

        @Override
        public void onClick(View view) {
            String url = getURL();
            if (url != null) {


                startActivity(new Intent(LinkTestActivity.this,WebViewActivity.class).putExtra("url",url));

            }
        }
    }

并在 webview 中加载 url。

更多信息见以下链接:-

Open URL in WebView instead of default Browser

【讨论】:

  • 当我尝试使用上述结果字符串设置文本时,如 textview.setText(text);它向我显示纯文本,甚至没有点击它。我还需要如何设置文本?
  • @King,使用setText(Html.fromHtml(s)),其中 s 应包含类似“请参阅此处:<a href="example.com/">example&lt;/a>”的文本
  • @Duggu onClick 永远不会被调用。当我点击链接时,它会在默认浏览器中打开。
  • 为了让这个解决方案正常工作,我们需要禁用自动链接(android:autoLink 视图标签不应设置为“web”),并以编程方式在 textview 上设置移动方法: textView.setMovementMethod(LinkMovementMethod .getInstance());
【解决方案2】:

从您发布的链接开始,您应该在 Manifest 文件中声明您的特定活动可以打开链接。单击此类链接时,您的活动将打开,因此您应该将启动模式设置为 singleTop。然后您可以接收新的意图并在您的 web 视图中显示它们。 onNewIntent: http://developer.android.com/reference/android/app/Activity.html#onNewIntent(android.content.Intent)

这个例子是关于实现搜索的,所以你可以跳到“singleTop”部分: http://developer.android.com/guide/topics/search/search-dialog.html

【讨论】:

    【解决方案3】:

    将此代码放在link.setText(--url--);之后

    ((TextView) findViewById(R.id.textView)).setOnClickListener(
        new OnClickListener() {
            @Override
            public void onClick(View v) {
                String url = ((TextView) findViewById(R.id.account_title))
                    .getText().toString();
                WebView webView = (WebView) findViewById(R.id.wv);
                webView.getSettings().setJavaScriptEnabled(true);
                webView.loadUrl(url);
            }
        }
    );
    

    在相关的 xml 文件中创建一个 webview,如下所示:

    <WebView android:id="@+id/wv"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />
    

    就是这样... 如果您仍然遇到问题,请告诉我。

    【讨论】:

    • 兄弟,我想在新活动中打开它。
    • @Ak10147 没问题,您可以对新活动使用相同的脚本,只需创建一个新的 JAVA 类并将 java 代码放入 onCreate() 方法,然后创建一个新的 .XML 文件并将上面的 xml 代码放入你的父布局。
    猜你喜欢
    • 1970-01-01
    • 2011-05-12
    • 2012-05-30
    • 2011-07-26
    • 1970-01-01
    • 2018-09-10
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多