Android---54---WebView初學,androidwebview
webView 組件本身就是一個瀏覽器實現,它的核心基於WebKit
1.使用WebView瀏覽網頁:
常用方法:
void goBack():後退
void goForward():前進
void loadUrl (String url):載入指定的URL對應的網頁
void loadUrl("file:///android_asset/XX.html"):載入本地檔案
boolean zoomIn():放大網頁
boolean zoomOut():縮小網頁
Demo:
顯示百度網頁
布局檔案:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/url" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:id="@+id/go" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="訪問" /> </LinearLayout> <WebView android:id="@+id/web" android:layout_width="fill_parent" android:layout_height="fill_parent" /></LinearLayout>
Activity代碼:
public class MainActivity extends Activity {WebView show;EditText urlText;Button goButton;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);show = (WebView) findViewById(R.id.web);show.getSettings().setJavaScriptEnabled(true);goButton = (Button) findViewById(R.id.go);urlText = (EditText) findViewById(R.id.url);goButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String path = urlText.getText().toString();show.loadUrl(path);}});}}
2.使用WebView載入HTML代碼:
WebView提供了一個方法用於載入HTML代碼:
loadData(String data ,String mimeType ,String encoding):
data:指定需要載入的HTML代碼
mimeType:指定HTML代碼的MIME類型,對於HTML代碼可指定為text/html
encoding:指定HTML代碼編碼所用的字元集,比如GBK
HTML代碼:
<html><head<title>無標題文檔</title></head><body><p>使用WebView載入HTML代碼:開啟百度網頁:<a href="http://www.baidu.com"> http://www.baidu.com</a></p></body></html>
Activity代碼:
public class MainActivity extends Activity {WebView show;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);show = (WebView) findViewById(R.id.web);StringBuilder sb = new StringBuilder();sb.append("<html>" + "<head" + "<title>無標題文檔</title>" + "</head>"+ "<body>" + "<p>" + "使用WebView載入HTML代碼:" + "開啟百度網頁:"+ "<a href='http://www.baidu.com'> http://www.baidu.com</a>"+ "</p>" + "</body>" + "</html>");// 這個方法顯示中文是亂碼// show.loadData(sb.toString(), "text/html", "utf-8");show.loadDataWithBaseURL(null, sb.toString(), "text/html", "utf-8",null);}}
3.使用WebView中的JavaScript調用Android方法:
為了讓WebView中的JavaScript指令碼調用Android方法,WebView提供了一個WebSettings工具類
調用其中的setJavaScriptEnabled (true)即可讓WebView中的JavaScript調用Android方法。
addJavascriptInterface (Object object ,String name )方法負責把object對象暴露成JavaScript中的name對象
setAllowFileAccess(true);// 設定允許訪問檔案資料
setBuiltInZoomControls(true);// 設定支援縮放
setSavePassword(false); // 設定是否儲存密碼
setUserAgentString("Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X;en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334bSafari/531.21.10");//支援各種不同的裝置
步驟:
1.調用WebView關聯的WebSettings的setJavaScriptEnabled (true)啟用JavaScript調用功能
2.調用addJavascriptInterface ()方法將object對象暴露給JavaScript
3.在JavaScript指令碼中通過剛才暴露的name對象調用Android方法
Activity:
public class JsCallAndroid extends Activity {WebView webView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_js_call_android);webView = (WebView) findViewById(R.id.webview);//在assets檔案夾中的testwebView.loadUrl("file:///android_asset/test.html");WebSettings webSettings = webView.getSettings();webSettings.setJavaScriptEnabled(true);// 將MyObject對象暴露給JavaScript指令碼// 這樣test.html頁面中的JavaScript可以通過myObj來調用MyObject的方法webView.addJavascriptInterface(new MyObject(this), "myObj");}}
MyObject:
public class MyObject {Context mContext;MyObject(Context c) {mContext = c;}// 該方法將會暴露給JavaScript指令碼調用public void showToast(String name) {Toast.makeText(mContext, name + ",您好!", Toast.LENGTH_LONG).show();}// 該方法將會暴露給JavaScript指令碼調用public void showList() {// 顯示一個普通的列表對話方塊new AlertDialog.Builder(mContext).setTitle("圖書列表").setIcon(R.drawable.ic_launcher).setItems(new String[] { "瘋狂Java講義", "瘋狂Android講義","輕量級Java EE公司專屬應用程式實戰" }, null).setPositiveButton("確定", null).create().show();}}