jquery mobile android浏览器,使用jQuery Mobile实现新闻浏览器(3)

【IT168 技术】在本教程的前两篇文章中,笔者分别向大家介绍了使用jQuery Mobile框架如何去设计手机新闻浏览器,其中实现了一个WEB版本的新闻浏览器,在本教程的最后一篇中,将讲解如何将已实现的web版本的新闻浏览器迁移到Android手机中去,注意的是,本文希望读者拥有一点基础的Android知识。

推荐阅读:

a1f42d988681d65d4818902fa0993aec.png

迁移到Android应用中去

在Android应用中,将会使用index.html作为界面的布局,我们将编写一个Android的Activity类将index.html整合到android应用中去。

修改index.html

首先,将index.html中的NEWS_URI修改:

None.gifvar NEWS_URI='http://rss.news.yahoo.com/rss/';

因为我们在这里不再需要使用bridge.php了,因为我们将index.html整合到了Android应用中去,因此不再存在跨域ajax访问问题,接下来作如下修改:

None.gifvar EMPTY='';

None.gif...

ExpandedBlockStart.gif

ContractedBlock.giffunction changeLocation(varURI)...{

InBlock.gif  showProgress();

ExpandedSubBlockStart.gif

ContractedSubBlock.gif  $.get(EMPTY,function(data)...{

InBlock.gif    window.location=varURI;

ExpandedSubBlockEnd.gif  });

ExpandedBlockEnd.gif}

changeLocation()方法将会在android.webkit.WebViewClient中被调用。这个方法的主要作用是当从新闻分类页面跳转到新闻详细页面时使用。

1、首先通过showProgress()来显示进度图标的等待状态;

2、jQuery的get()方法中实际上是一个特定的jQuery ajax()方法,在get方法中,我们传入一个空的字符串和一个回调的事件句柄,去设置window.location为我们要查看的具体新闻内容页面的地址。当新闻内容详细页加载完毕后,就会替换掉等待的图标,显示新闻内容页的详细内容;

3、因为在web版本中,是存在浏览器本身的进度条,因此changeLocation方法倒不一定需要,但在手机设备上,有一个等待的图标是能给用户良好的用户体验的。

编写Activity类

接下来,编写NewsActivity类,代码如下:

None.gifpackagecom.news;

None.gif

None.gifimportandroid.app.Activity;

None.gifimportandroid.webkit.WebView;

None.gifimportandroid.os.Bundle;

None.gif...

ExpandedBlockStart.gif

ContractedBlock.gifpublicclassNewsActivityextendsActivity...{

InBlock.gif    WebView mWebView;

InBlock.gif

ExpandedSubBlockStart.gif

ContractedSubBlock.gifpublicvoidonCreate(Bundle savedInstanceState)...{

InBlock.gifsuper.onCreate(savedInstanceState);

InBlock.gif    setContentView(R.layout.main);

InBlock.gif

InBlock.gif    mWebView=(WebView) findViewById(R.id.webview);

InBlock.gif    mWebView.setWebViewClient(newNewsClient());

InBlock.gif    mWebView.getSettings().setJavaScriptEnabled(true);

InBlock.gif    mWebView.getSettings().setDomStorageEnabled(true);

InBlock.gif    mWebView.loadUrl("android_asset/www/index.html");

ExpandedSubBlockEnd.gif  }InBlock.gif  ...

ExpandedBlockEnd.gif}

1、首先在onCreate方法中,调用了setContentView方法加载了res/layout文件夹下的R.layout.main布局文件;

2、接下来,我们通过findViewById(R.id.webview)得到了一个WebView控件的实例,并设计一个自定义的WebViewClient实例作为给WebView控件的参数,这个自定义的WebViewClient我们命名为NewsClient,我们稍后会介绍。接着我们设置这个WebView容器能支持Javascript和Dom;

3、最后,使用loadUrl将之前我们做的android_asset/www/index.html加载进来,在新闻详细内容页中,当用户点后退按钮后,会回到新闻分类页,在Android中,我们可以捕捉其onKeyDown事件代码,如下:

ExpandedBlockStart.gif

ContractedBlock.gifpublicclassNewsActivityextendsActivity...{

InBlock.gif    WebView mWebView;

ExpandedSubBlockStart.gif

ContractedSubBlock.gifpublicbooleanonKeyDown(intkeyCode, KeyEvent event)...{

ExpandedSubBlockStart.gif

ContractedSubBlock.gifif((keyCode==KeyEvent.KEYCODE_BACK)&&mWebView.canGoBack())...{

InBlock.gif      mWebView.goBack();

InBlock.gifreturntrue;

ExpandedSubBlockEnd.gif    }InBlock.gifreturnsuper.onKeyDown(keyCode, event);

ExpandedSubBlockEnd.gif  }InBlock.gif  ...

ExpandedBlockEnd.gif}

接下来看下我们如何编写一个自定义的WebViewClient,代码如下:

ExpandedBlockStart.gif

ContractedBlock.gifpublicclassNewsActivityextendsActivity...{

InBlock.gif    WebView mWebView;

ExpandedSubBlockStart.gif

ContractedSubBlock.gifprivateclassNewsClientextendsWebViewClient...{

InBlock.gif

ExpandedSubBlockStart.gif

ContractedSubBlock.gifpublicbooleanshouldOverrideUrlLoading(WebView view, String url)...{

InBlock.gif      view.loadUrl("javascript:changeLocation('"+url+"')");

InBlock.gifreturntrue;

ExpandedSubBlockEnd.gif    }ExpandedSubBlockEnd.gif  }InBlock.gif...

ExpandedBlockEnd.gif}

首先,我们继承了WebViewClient这个Android内置的浏览器类,并重写了其中的shouldOverrideUrlLoading方法,在这个方法中,调用了之前写的changeLocation方法,而如果我们不定义自己的WebViewClient,那么新闻详细内容页将会在显示在一个单独的新打开的浏览器中,而我们希望新闻内容页只是显示在同一个浏览器页面中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值