程序员人生 网站导航

WebVeiw 的基本使用

栏目:综合技术时间:2014-12-13 09:15:59

今天简单那的了解了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!

让进度条消失。


------分隔线----------------------------
------分隔线----------------------------

最新技术推荐