WebVeiw 的基本使用
來源:程序員人生 發布時間:2014-12-13 09:15:59 閱讀次數:2763次
今天簡單那的了解了1下WebView
大致分為兩種情況: 1 在fragment 中 2 在Activity
1 在Fragment中的 WebView Client 點擊回退是個難點
解決回退的方法Code:
原理很簡單: 就是監聽 Fragment 當前的事件, 但按下的時候,看是否是回退鍵,WebView是不是可以回退?
可以的話,直接回退!
//設置 WebView 內部的回退跳轉:
webView.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(event.getAction() == KeyEvent.ACTION_DOWN)
{
if(keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack())
{
webView.goBack();
return true;
}
}
return false;
}
});
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.cim.pd.ui.fragment;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.ProgressBar;
import com.cim.pd.R;
import com.cim.pd.ui.MainActivity;
import com.cim.pd.view.MyWebViewClient;
/**
* 菜單欄:
* 購買希盟智能裝備頁面
*
* @author Hades
* @Time 2014⑴2⑷
*
*/
public class BuyDeviceFragment extends Fragment {
public static final String ARG = "BuyDeviceFragment";
private MainActivity mainActivity;
/**
* 購買裝備的WebView
* */
private WebView webView;
/**
* 進度條
* */
private ProgressBar progressBar;
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
mainActivity = (MainActivity) activity;
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragment_buy_device, container, false);
initTop(view);
initWebView(view);
return view;
}
/**
* 初始化頂部的信息
*
* @author Hades
* @Time 2014⑴2⑷
* @param view
*/
private void initTop(View view)
{
progressBar = (ProgressBar) view.findViewById(R.id.buy_progressBar);
progressBar.setVisibility(View.VISIBLE);
ImageView drawerView = (ImageView)view.findViewById(R.id.drawer_menu);
//設置監聽器:
drawerView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mainActivity.toggle();
}
});
}
/**
* 初始化頁面信息:
*
* @author Hades
* @Time 2014⑴2⑷
* @param view
*/
private void initWebView(View view)
{
webView = (WebView)view.findViewById(R.id.buy_webview);
webView.getSettings().setJavaScriptEnabled(true);
String url = "http://m.cim120.com/";
//第1步: 直接加載網址
webView.loadUrl(url);
//第2步: 設置頁面在當前的WebView 中跳轉!
MyWebViewClient client = new MyWebViewClient(mainActivity,progressBar);
webView.setWebViewClient(client);
//設置 WebView 內部的回退跳轉:
webView.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(event.getAction() == KeyEvent.ACTION_DOWN)
{
if(keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack())
{
webView.goBack();
return true;
}
}
}
});
}
@Override
public void onDestroyView() {
// TODO Auto-generated method stub
super.onDestroyView();
}
}
2 Activity
/**
* 初始化組件
*
* @Hades
* @Dec 3, 2014
* @11:35:35 PM
*/
private void init() {
webView = (WebView) this.findViewById(R.id.my_buy_webview);
webView.getSettings().setJavaScriptEnabled(true);
String url = "http://m.cim120.com/";
//第1種方式: 直接加載
webView.loadUrl(url);
//第2種: 創建自己的 閱讀器!搜友的數據信息在里面顯示!
MyWebViewClient client = new MyWebViewClient(BuyDeviceActivity.this,progressBar);
webView.setWebViewClient(client);
}
/**
* 設置WebViewClient 內部的回退
*/
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
if(webView.canGoBack())
{
webView.goBack();
}else{
finish();
}
}
Activity 內部有1個監聽 回退鍵的 回調方法。
onBAckPressed;
---------------------------------------------------------------------------------------------------------------------------------
webView 中的 webView.getSettings().setJavaScriptEnabled(true);
這是添加 Js 的支持, 如果沒有這句話的話,就會致使 webView 加載的頁面中,
JS的殊效,沒法顯示!
-------------------------------------------------------------------------------------------------------------------------------
今天有的小大意:
跳轉BuyDeviceActivity的時候
點擊的時候, 怎樣還保存數據了?
Error:
12-04 13:51:19.778: E/CrashHandler(19281): Caused by: libcore.io.ErrnoException: write failed: ENOSPC (No space left on device)
緣由是由于: 自己太大意了! 沒有添加 在 Application 中注冊 Activity!
------------------------------------------------------------------------------------------------------------------------
WebViewClient是 用來顯示WebView 的內容的數據;
如果沒有他的話,當你點擊啊WebView內部的內容的時候,就會默許的開啟1個Intent去調用本地的
閱讀器的App。
所以 必須自定義 WebViewClient,
shouldOverrideUrlLoading 是必須重寫的。
package com.example.webview;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
public class MyWebViewClient extends WebViewClient {
private ProgressBar progressBar;
public MyWebViewClient() {
// TODO Auto-generated constructor stub
}
public MyWebViewClient(Activity context) {
// TODO Auto-generated constructor stub
super();
}
public MyWebViewClient(Activity context,ProgressBar progressBar) {
// TODO Auto-generated constructor stub
super();
this.progressBar = progressBar;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
/**
* WebView加載終了數據
* */
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
// super.onPageFinished(view, url);
progressBar.setVisibility(View.GONE);
}
}
onPageFinished()是在 WebView加載成功以后調用的,
這里 可以設置 進度條為 gone!
讓進度條消失。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈