2013-03-04 104 views
4

我在我的Android應用程序中使用了webview。http:// a href鏈接在Android中不起作用

我有3個按鈕1用於指向一個網站的鏈接,一個用於呼叫號碼和一個電子郵件按鈕。

起初打電話給我的網站按鈕工作,http://www.somelink.com

但我的電話:鏈接不工作。所以我集成了一些使我的電話:按鈕工作的代碼。

問題是它使我的網站或http:按鈕不起作用?

當您單擊它時,html按鈕不會執行任何操作。

package de.sonae.novolam; 

import android.annotation.SuppressLint; 
import android.app.Fragment; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 


@SuppressLint("SetJavaScriptEnabled") 
public class DFragment extends Fragment { 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
View mainView = (View) inflater.inflate(R.layout.dfragment, container, false); 
WebView webView = (WebView) mainView.findViewById(R.id.webview); 
webView.getSettings().setJavaScriptEnabled(true); 

webView.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView wv, String url) { 
    if (url.startsWith("tel:")) { 
      Intent intent = new Intent(Intent.ACTION_DIAL, 
        Uri.parse(url)); 
      startActivity(intent); 
    } 

    return true; 
} 
    }); 
webView.loadUrl("file:///android_asset/contact.html"); 
return mainView; 
} 

public boolean shouldOverrideUrlLoading(WebView webView, String url) { 
    if(url.startsWith("http:") || url.startsWith("https:")) { 
     webView.loadUrl(url); 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(intent); 
    } 

    else if (url.startsWith("mailto:")) { 

    } 

    // Otherwise allow the OS to handle it 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    startActivity(intent); 
    return true; 
} 
} 

回答

3

你需要告訴網絡視圖,當你處理網址加載時,你自己,當你想做它的委託處理。當您通過自己的操作處理網址加載時,只需從shouldOverrideUrlLoading返回true即可。返回否則爲false:如果你想覆蓋

webView.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView wv, String url) { 
     if (url.startsWith("tel:")) { 
      Intent intent = new Intent(Intent.ACTION_DIAL, 
        Uri.parse(url)); 
      startActivity(intent); 

      return true; // we handled the url loading 
     } 

     return false; // let WebView handle this event 
    } 
}); 
7

在代碼中有兩個shouldOverrideUrlLoading方法。唯一的第一個實際上由WebView調用。將代碼從第二個shouldOverrideUrlLoading移到第一個,它將起作用。

webView.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView wv, String url) { 
     if (url.startsWith("tel:")) { 
      Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } else if(url.startsWith("http:") || url.startsWith("https:")) { 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } else if (url.startsWith("mailto:")) { 
      // TODO : handle mail url 
      return true; 
     } 

     return false; 
    } 
}); 
1

的方法shouldOverrideUrlLoading應該返回true(即防止默認處理)或假,如果你想要的東西照常運行。

@Override 
public boolean shouldOverrideUrlLoading(WebView wv, String url) { 
    if (url.startsWith("tel:")) { 
     Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
     startActivity(intent); 
     return true; 
    } 

    return false; 
}