2012-01-05 167 views
10

我正在瀏覽android教程,並嘗試使用WebView示例。這是我結束了:WebView是否需要WebViewClient才能工作?

WebAppActivity

public class WebAppActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     WebView wv = (WebView) findViewById(R.id.webView1); 
     wv.loadUrl("http://www.google.com"); 

    } 
} 

的main.xml但

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <WebView 
     android:id="@+id/webView1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
    </WebView> 

</LinearLayout> 

而是儘快在應用程序本身加載頁面,作爲應用程序啓動默認的Android瀏覽器打開,並在瀏覽器中加載頁面而不是應用程序。當我按回時,我會返回到顯示空白屏幕的應用程序活動。

有誰知道爲什麼會發生這種情況?

編輯:

清單

<uses-sdk android:minSdkVersion="7" /> 
<uses-permission android:name="android.permission.INTERNET"/> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:label="@string/app_name" 
     android:name=".WebAppActivity" > 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

這只是表明我已經添加INTERNET權限

編輯:

只要我在應用程序中添加WebViewClient

wv.setWebViewClient(new WebViewClient() {}); 

頁面加載。這是預期的行爲? Android WebView 是否需要一個WebViewClient? (找不到它的任何文件)

編輯:

我注意到,當我在有谷歌API的仿真器安裝APK出現此問題。在普通模擬器上(沒有Google API),它的行爲如預期。

+1

你的問題已經得到解答:http://stackoverflow.com/questions/2378800/android-webview-click-opens-default-browser – ariefbayu 2012-01-05 09:43:39

+0

@silent請仔細閱讀。這不是我的問題。我無法加載第一頁本身,它加載在瀏覽器中而不是應用程序中。請參閱Flo的評論 – 2012-01-05 09:48:27

+1

不,我不認爲他在討論點擊鏈接的網頁本身。這聽起來像網頁永遠不會加載在WebView中。 – Flo 2012-01-05 09:49:33

回答

3

是的,你必須設置在overrided法「shouldOverrideUrlLoading」返回true,使您的WebView在您的應用程序加載的URL WebViewClient。

讓我知道你是否想要一個例子。


編輯

@Aki WebViewClient.shouldOverrideUrlLoading Documentation

給主機應用程序有機會接管控制,當一個新的URL是關於在當前的WebView加載。 如果未提供WebViewClient,默認情況下,WebView將要求活動管理器爲url選擇適當的處理程序。如果提供了WebViewClient,則返回true表示主機應用程序處理url,而返回false表示當前的WebView處理該url。

+0

@Christopher爲什麼只有在使用google apis的設備的情況下,我們才需要webViewClient。此外,你可以指出我的一些官方的Android文檔,說明這一事實? – 2012-01-12 04:30:26

+0

@Aki編輯答案 – ChristopheCVB 2012-01-12 11:11:37

+0

謝謝克里斯託弗。但是當我們調用'loadUrl'方法時,它並沒有說任何'shouldOverrideUrlLoading'被調用。 – 2012-01-12 12:08:50

0
private WebView webVenue; 
private WebSettings websettings; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 

     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.schedule_time); 

     webVenue = (WebView)findViewById(R.id.webview_schedule_time); 
     txtEmptyMsg = (TextView)findViewById(R.id.txtEmptyMsg); 

     mContext = this;   
     webVenue.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
     webVenue.getSettings().setJavaScriptEnabled(true); 
     websettings=webVenue.getSettings(); 
     webVenue.setScrollBarStyle(ScrollView.SCROLLBARS_OUTSIDE_OVERLAY); 
     webVenue.loadUrl(URL); 
} 
} 

所有最好的...

+0

謝謝你的回答。我**知道**其他方式讓它工作。例如添加一個'WebViewClient'就可以運行。開始工作並不是我關心的問題。找出爲什麼它不工作,是。 – 2012-01-05 09:58:25

+0

嘿你的代碼適合我.... – Richa 2012-01-05 10:07:12

+0

哪些代碼?你的還是我的? – 2012-01-05 10:08:19

0

無不大,但它可以讓你做了很多的東西。

注意,使得在WebViewClient到shouldOverrideUrlLoading通話似乎不擦出火花,所以你應該onPageFinished做你的處理。

這裏是一個blog post那會指導您完成。

0

對於加載從URL網頁到網頁視圖,也沒有必要設置的WebView客戶端。沒有webview客戶端,你可以加載一個網頁到你的web視圖。但是WebViewClient爲處理webview帶來很多好處。示例用法從網址加載網頁,


webView.loadUrl(yoururl); 
0

URL在默認的Android瀏覽器中打開的唯一原因是因爲 「wv.loadUrl(」 http://www.google.com 「);」

當您加載http://www.google.com時,谷歌網站實際上將該頁面重定向到http://www.google.co.in(假設您從印度啓動該應用程序)。

如果您運行「wv.loadUrl(」http://www.google.co.in「);」,Google將不會重定向頁面,並且第一頁將在您的應用程序中打開,並且進一步的點擊將在系統瀏覽器中打開。

要處理此進一步點擊,您需要WebViewClient。

相關問題