Android 簡單瀏覽器例項-webview控制元件

weixin_42647397發表於2018-07-09

1.簡介

在Android開發中,我們難免會使用到網頁,而Android給我們提供了非常方便的載入網頁的工具--Webview,其實webview在設計上就是獨立的一個體系,雖然webview也是一個view,但是webview在載入,顯示,繪製等方便,不同於我們使用的各種view:button,imageview,text等,webview中有獨立的繪圖引擎去繪製網頁中的各種資源;

同時對於webview來說,其實webview本身就是一個瀏覽器,webview控制元件包含了瀏覽器的各種功能,google已經開放出了足夠的介面,你只需要呼叫相應的介面,既可以實現一個簡單的瀏覽器。

    步驟:1.設計使用者介面 activity_mian.xml
               2.方法實現 MainActivity.java

              3.聯網宣告 AndriodManifest.xml

下面將會使用webview建立一個簡單的瀏覽器;


1.設計使用者介面 activity_mian.xml

該瀏覽器有一個editText,能夠讓使用者輸入網址,有一個button讓使用者點選相應響應載入網頁操作,當前指新增了返回按鍵,讓webview回滾上一個載入頁面的操作,當然你也可以監聽別的按鍵或者操作,進行上一頁或者下一頁的操作,這個看各自的設計邏輯;

xml佈局檔案程式碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.administrator.MainActivity">
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">
 
        <EditText
            android:id="@+id/web_url"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="7"
            android:imeOptions="actionSearch"
            android:text="http://www.baidu.com"/>
 
        <Button
            android:id="@+id/search_url"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="搜尋"/>
    </LinearLayout>
 
    <WebView
        android:layout_weight="20"
        android:id="@+id/webshow"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
 
 
</LinearLayout>

2.方法實現 MainActivity.java

package com.example.administrator.mywebview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    private EditText web_url;
    private WebView webshow;
    private Button search_url;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        web_url = findViewById(R.id.web_url);
        webshow = findViewById(R.id.webshow);
        webshow.getSettings().setJavaScriptEnabled(true);
        webshow.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webshow.getSettings().setSupportMultipleWindows(true);
        webshow.getSettings().setBuiltInZoomControls(true);
        webshow.setWebViewClient(new WebViewClient());
        webshow.setWebChromeClient(new WebChromeClient());
        webshow.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                Log.d("browser","motionEvent:" + motionEvent.toString());
                return false;
            }
        });
        webshow.loadUrl("http://cn.bing.com");    

        search_url = findViewById(R.id.search_url);
        search_url.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String url = web_url.getText().toString();
                Log.d("browser","url:" + url);      //獲取使用者輸入的網址
                webshow.getSettings().setJavaScriptEnabled(true);
                webshow.loadUrl(url);
            }
        });
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_SEARCH || keyCode == KeyEvent.KEYCODE_ENTER){
            String url = web_url.getText().toString();
            Log.d("browser", "url:" + url);
            webshow.getSettings().setJavaScriptEnabled(true);
            webshow.loadUrl(url);
        }
        if((keyCode == KeyEvent.KEYCODE_BACK) && webshow.canGoBack()) {
            webshow.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

 3.聯網宣告 AndriodManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.administrator.mywebview">
    <!--允許聯網 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--獲取GSM(2g)、WCDMA(聯通3g)等網路狀態的資訊  -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--獲取wifi網路狀態的資訊 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!--保持CPU 運轉,螢幕和鍵盤燈有可能是關閉的,用於檔案上傳和下載 -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!--獲取sd卡寫的許可權,用於檔案上傳和下載-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!--允許讀取手機狀態 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>


相關文章