Android學習筆記(二九):嵌入瀏覽器

來源:互聯網
上載者:User

WebView的使用很方便。在學習WebView之前,我們現看看如何通過程式中調瀏覽器。

1、在程式中調起瀏覽器

Uri uri = Uri.parse("http://commonsware.com");
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);

2、通過WebView嵌入瀏覽器

1)允許internet串連的訪問

在上面的例子中,我們可能發現無法相關的網頁,這是因為程式不具備internet串連的許可權,我們需要在Androidmanifest.xml中為App設定相關的許可權。

<manifest... >
    ... ...
<uses-permission android:name="android.permission.INTERNET" />
    <application .....>
         ... ...
    </application>
</manifest>

2)在Android XML中設定WebView控制項

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout .... >
   <WebView android:id="@+id/c131_webkit"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent" />
</LinearLayout>

3)通過WebView對象,載入某個URL

WebView browser=(WebView)findViewById(R.id.c131_webkit);
browser.loadUrl("http://commonsware.com");

我們注意到嵌入的browser沒有工具列的,因此需要通過程式來某些操作和處理,例如reload(), goBack(), canGoBack(), goForward(), canGoForward(), goBackOrForward(),負數表示回跳N次,正數表示前行N次,canGoBackOrForward(), clearCache(), clearHistory()。

4)通過WebView對象,載入自己的內容

我們可以將WebView作為自己的布局框,在裡面使用HTML來表述自己的內容。

browser.loadData("<html><body><h2>Hello , world!</h2></body></html>", "text/html", "UTF-8");

3、獲得觸發的事件響應

我們可以通過WebViewClient在WebView中加鉤子來擷取觸發事件和相應。下面是一個簡單的例子,瀏覽器中顯示目前的時間,並作為一個連結,當我們點擊這個連結時,更新為當前最新時間。

private WebView browser= null;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chapter_13_test1);
        browser = (WebView)findViewById(R.id.c131_webkit);
        browser.setWebViewClient(new WebViewClient(){
               /* 這個事件,將在使用者點選連結時觸發。通過判斷url,可確定如何操作,如果返回true,表示我們已經處理了這個request,如果返回false,表示沒有處理,那麼瀏覽器將會根據url擷取網頁*/
               
public boolean shouldOverrideUrlLoading(WebView view, String url) {
                     
loadTime();
                     
return true; //表示已經處理了這次URL的請求
               
}
        });
       loadTime();
}

private void loadTime(){
        String page="<html><body><a href=/"clock/">" + new Date().toString()  + "</a></body></html>";
        /* 這裡我們使用了loadDataWithBaseUrl的方式。瀏覽器可以通過"file:///android_asset/"來獲得映用中asset/的資源。但是如果我們沒有設定baseUrl,或者為空白,這無法擷取,想擷取這些資源,baseUrl不能設定為http(s)/ftp(s)/about/javascript這些已有專屬的定義。在例子中,我們baseUrl設定為"wei://base".
對於上面的那個連結地址為wei://base/clock */
        browser.loadDataWithBaseURL("wei://base", page, "text/html","UTF-8", null);
}

4、豐富瀏覽器的設定

我們可以通過webview.getSettings()獲得WebSettings對象,對瀏覽器進行設定。如果我們需要支援JavaScript,我們需要如下設定:

browser.getSettings().setJavaScriptEnabled(true);

有幾個比較常用的,setDefaultFontSize(), setTextSize(), etJavaScriptEnabled(), setJavaScriptCanOpenWindowsAutomatically(), setUserAgent()-“1”表示使用PC瀏覽器,0表示使用手機瀏覽器,可以通知website給出相應的排版方式。

下面是一個例子,在這個例子中,我使用acivity的進度條來顯示載入網頁的進度條,當進度條滿的時候,進度條會消失。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final Activity activity = this;   
//因為方法是以final的方式,所以設定final。
        //設定activity的進度條,下面一句必須在setContentView之前,否則會報錯。下面的語句也可以用activity.requestWindowFeature(Window.FEATURE_PROGRESS);來替代
        getWindow().requestFeature(Window.FEATURE_PROGRESS);
              
        setContentView(R.layout.chapter_13_test1);
        browser=(WebView)findViewById(R.id.c131_webkit);
        browser.getSettings().setJavaScriptEnabled(true);
//設定支援javascript的例子
        //通過WebChromeClient可以處理JS對話方塊,titles, 進度,等,這個例子,我們處理,我們將websit下載的進度同步到acitity的進度條上。
        browser.setWebChromeClient(new WebChromeClient(){
             public void onProgressChanged(WebView view, int newProgress) {
                //activity的進度是0 to 10000 (both inclusive),所以要*100
                activity.setProgress(newProgress * 100);
            }           
        });
        browser.loadUrl("http://slashdot.org/");
    }

相關連結:我的Andriod開發相關文章

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.