在Webview中点击文本时启动Activity的意图

4

我在xml中有一个WebView,代码如下:

 <WebView
        android:id="@+id/webView"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

I am loading the webview like this:

String webView_text = "Lorem ipsum..............**<a><u>Link to fire intent</u></a>**";

 WebView webView= (WebView) findViewById(R.id.webView);
webView.loadData(String.format(htmlText, webView_text), "text/html", "utf-8");
        webView.setWebViewClient(new WebViewClient()
        {
            // Override URL
            public boolean shouldOverrideUrlLoading(WebView view, String url)
            {
                Intent intent = new Intent(getApplicationContext(),OtherActivity.class);
                startActivity(intent);
                return true;
            }
        });

请注意,我正在使用html标签在我的字符串(webView_text)中创建链接并覆盖函数以触发意图。但在这种情况下没有起作用。问题出在哪里?我不确定Android Webview是否支持a标签(我认为应该支持)。我的错误在哪里?谢谢。
3个回答

6
您可以在清单文件中对Activity的Intent Filter定义方案来实现此功能。例如,创建Activity(A)和Activity(B),并在清单文件中按以下方式定义它们:
<activity android:name="A" >
    <intent-filter>
        <category android:name="android.intent.category.DEFAULT" />
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="activity_a" />
    </intent-filter>
</activity>
<activity android:name="B" >
    <intent-filter>
        <category android:name="android.intent.category.DEFAULT" />
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="activity_b" />
    </intent-filter>
</activity>

如果您的HTML中有这样的链接:
<a href="activity_b://b">Activity B</a>

当您点击它时,会启动Activity B。Activity A与之类似。

您可以从源代码获取源代码。

注意:如果对于这种方法使用WebView,则必须重写shouldOverrideUrlLoading()方法并比较每个URL。


具体的答案!非常感谢,兄弟!你能解释一下我错在哪里吗? - uLYsseus
@surbiks,对于TextView来说它很好用。在WebView中是否也能做到同样的事情呢? - Jagdish
@jagdish,是的,你可以在Webview和所有链接中这样做。 - Golil
谢谢@surbiks,我尝试过了,但它会在浏览器中打开新选项卡。但如果我覆盖shouldOverrideUrlLoading()方法并比较每个URL,它就可以正常工作。 - Jagdish
1
我正在尝试在我的项目中实现这个解决方案,但是当我点击链接时,会出现“网页不可用”的消息。我在清单文件中添加了要打开的活动的intent-filter,并在我的webview中添加了活动链接。我还需要做些什么或者我做错了什么吗? - Bartek Kosa

3
我们可以像使用TextView一样使用WebView。
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView webView=(WebView)findViewById(R.id.link2);

        /*TextView t3 = (TextView) findViewById(R.id.link);

        t3.setText(
                Html.fromHtml(
                    "<b>text3:</b>  Text with a " +
                    "<a href=\"activity_a://a\">Activity A</a> : " +
                    "<a href=\"activity_b://b\">Activity B</a> "));
        t3.setMovementMethod(LinkMovementMethod.getInstance());*/

        String data= "<html><head></head>"+
                "<b>text3:</b>  Text with a " +
                "<a href=\"activity_a://a\">Activity A</a> : " +
                "<a href=\"activity_b://b\">Activity B</a></html> ";

        webView.loadData(data, "text/html", "utf-8");

        webView.setWebViewClient(new WebViewClient()
        {
            // Override URL
            public boolean shouldOverrideUrlLoading(WebView view, String url)
            {
                if(url.equalsIgnoreCase("activity_a://a")){
                    Intent intent=new Intent(getApplicationContext(),A.class);
                    startActivity(intent);
                }
                else if(url.equalsIgnoreCase("activity_b://b")){
                    Intent intent=new Intent(getApplicationContext(),B.class);
                    startActivity(intent);
                }
                Log.e("URL","URL "+url);
                return true;
            }
        });

    }

希望这可以帮助其他人。谢谢!


0

我认为这是因为锚点标签没有href属性。


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