首页 > 代码库 > WebVeiw 的基本使用
WebVeiw 的基本使用
今天简单那的了解了一下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-12-4 * */ 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-12-4 * @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-12-4 * @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/"; //第一步: 直接加载网址 webView.loadUrl(url); //第二步: 设置页面在当前的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/"; //第一种方式: 直接加载 webView.loadUrl(url); //第二种: 创建自己的 浏览器!搜友的数据信息在里面显示! 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 内部有一个监听 回退键的 回调方法。
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内部的内容的时候,就会默认的开启一个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!
让进度条消失。
WebVeiw 的基本使用