安卓可以安卓调用webserviceView加个壳子做一个轻量级浏览器吗

Android自定义 WebView浏览器
作者:陶士涵
字体:[ ] 类型:转载 时间:
WebView是Android中一个非常实用的组件,它和Safai、Chrome一样都是基于Webkit网页渲染引擎。接下来通过本文给大家介绍android自定义webview浏览器,感兴趣的朋友一起学习吧
WebView是Android中一个非常实用的组件,它和Safai、Chrome一样都是基于Webkit网页渲染引擎,可以通过加载HTML数据的方式便捷地展现软件的界面。
在布局文件中添加&EditText/&和&Button/&控件,
在布局文件中添加&WebView/&控件
在Activity中获取WebView对象
调用WebView对象的loadUrl()方法,参数:String路径
添加访问网络的权限android.permission.INTERNET
调用WebView对象的getSettings()方法,获取到WebSettings设置对象
调用WebSettings对象的setSupportZoom()方法,设置支持缩放,参数:布尔值
调用WebSettings对象的setBuiltInZoomControls(),设置缩放控件,参数:布尔值、
调用WebView对象的setWebViewClient()方法,设置客户端防止链接打开系统浏览器,参数:WebViewClient对象
监听后退键,返回上一界面
重写Activity的onKeyDown()方法,参数传递进来int键盘码,KeyEvent对象
如果键盘码等于KeyEvent.KEYCODE_BACK并且当前WebView对象有很多页能后退,调用WebView对象的canGoBack()方法
调用WebView对象的goBack()方法,页面后退
设置菜单键,重写onCreateOptionsMenu()方法,传递进来Menu对象
调用Menu对象的addSubMenu()方法,添加菜单,参数:组id,条目id,排序,标题
添加刷新,后退,前进
监听小菜单点击事件
重写onOptionsItemSelected()方法,传递进来MenuItem对象
switch判断一下MenuItem对象的getOrder(),对应上面的排序
页面刷新,调用WebView对象的reload()方法
页面后退,先调用WebView对象的canGoBack()方法,判断是否能后退,调用goBack()方法后退
页面前进,调用WebView对象的canGoForward()方法,判断是否能前进,调用goForward()方法前进
页面loading
获取ProgressDialog对象,new出来,参数:上下文
调用ProgressDialog对象的setMessage()方法,参数:文本
调用WebView对象的setWebChromeClient()方法,参数:WebViewClient对象,
匿名内部类继承WebViewClient类,重写onPageStarted()方法和onPageFinshed()方法
在onPageStarted()方法内
调用ProgressDialog对象的show()方法
在onPageFinshed()方法内
调用ProgressDialog对象的dismiss()方法
package com.tsh.
import android.app.A
import android.app.ProgressD
import android.graphics.B
import android.os.B
import android.view.KeyE
import android.view.M
import android.view.MenuI
import android.view.W
import android.webkit.WebS
import android.webkit.WebV
import android.webkit.WebViewC
public class MainActivity extends Activity {
private WebV
private ProgressD
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
pd=new ProgressDialog(this);
pd.setMessage("正在加载...");
//webview的简单设置
webview=(WebView) findViewById(R.id.wv_internet);
webview.loadUrl("");
WebSettings websettings=webview.getSettings();
websettings.setSupportZoom(true);
websettings.setBuiltInZoomControls(true);
webview.setWebViewClient(new WebViewClient(){
public void onPageStarted(WebView view, String url, Bitmap favicon) {
pd.show();
public void onPageFinished(WebView view, String url) {
pd.dismiss();
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK&&webview.canGoBack()){
webview.goBack();
return super.onKeyDown(keyCode, event);
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, "刷新");
menu.add(0, 0, 1, "后退");
menu.add(0, 0, 2, "前进");
return super.onCreateOptionsMenu(menu);
//菜单点击事件
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getOrder()) {
webview.reload();
if(webview.canGoBack()){
webview.goBack();
if(webview.canGoForward()){
webview.goForward();
return super.onOptionsItemSelected(item);
关于本文给大家介绍的Android自定义 WebView浏览器的内容就给大家介绍这么多,希望对大家有所帮助!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
还有苹果。如果是,是不是会带来安全问题?有什么解决方法吗
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
不带cookie的
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:android 用webview自制带有history和download功能的浏览器
package com.
import java.util.ArrayL
&import java.util.L
import android.app.A
&import android.content.I
&import android.graphics.B
&import android.graphics.C
&import android.graphics.M
&import android.graphics.P
&import android.net.U
&import android.os.B
&import android.util.L
&import android.view.V
&import android.view.View.OnClickL
&import android.webkit.CookieM
&import android.webkit.CookieSyncM
&import android.webkit.DownloadL
&import android.webkit.ValueC
&import android.webkit.WebChromeC
&import android.webkit.WebHistoryI
&import android.webkit.WebS
&import android.webkit.WebV
&import android.webkit.WebViewC
&import android.widget.B
&import android.widget.EditT
&import android.widget.GridV
&import android.widget.ProgressB
import com.mysession.model.HistoryM
public class D_sessionActivity extends Activity implements OnClickListener,
&&&&&&&& DownloadListener {
&&& private static final String TAG = &TAG&;
&&&& // private String detailUrl =
&&&& // &&;
&&&& // private String detailUrl =
&&&& // &https://172.20.230.67:8900/iportal/servlet/GetMobileContent?&user=administrator&vol=allen_iServer&profile=myserver&password=uaABd7AZ0ThXe6WFM2FdqA%3D%3D&respFormat=html&subID=7fb249ba-63-a743c740aeeb&enc=1&;
&&& // private String detailUrl = &/&;
&&&& private WebV
&&&& private Button btnLoad, btnReset, btnHistory, btnBack, btnF
&&&& private EditText etU
&&&& private ProgressBar mProgressB
&&&& private GridView mGridV
&&&& private CookieManager cookieM
&&&& private BrowserHistoryAdapter browserHistoryA
&&&& private List&HistoryModel& historyModels = new ArrayList&HistoryModel&();
&&& /** Called when the activity is first created. */
&&&& @Override
&&&& public void onCreate(Bundle savedInstanceState) {
&&&&&&&& super.onCreate(savedInstanceState);
&&&&&&&& setContentView(R.layout.main);
&&&&&&& CookieSyncManager.createInstance(this);
&&&&&&&& cookieManager = CookieManager.getInstance();
&&&&&&& webview = (WebView) findViewById(R.id.webView1);
&&&&&&&& btnLoad = (Button) findViewById(R.id.btnLoad);
&&&&&&&& btnReset = (Button) findViewById(R.id.btnReset);
&&&&&&&& btnHistory = (Button) findViewById(R.id.btnHistory);
&&&&&&&& mProgressBar = (ProgressBar) findViewById(R.id.progressBar1);
&&&&&&&& etUrl = (EditText) findViewById(R.id.etUrl);
&&&&&&&& btnBack = (Button) findViewById(R.id.btnBack);
&&&&&&&& btnForward = (Button) findViewById(R.id.btnForward);
&&&&&&&& mGridView = (GridView) findViewById(R.id.gridView1);
&&&&&&& btnLoad.setOnClickListener(this);
&&&&&&&& btnReset.setOnClickListener(this);
&&&&&&&& btnHistory.setOnClickListener(this);
&&&&&&&& btnBack.setOnClickListener(this);
&&&&&&&& btnForward.setOnClickListener(this);
&&&&&&& webview.getSettings().setScriptEnabled(true);
&&&&&&&& webview.setWebViewClient(new BirtMobileWebViewClient());
&&&&&&&& webview.setWebChromeClient(new GeoClient());
&&&&&&&& webview.setDownloadListener(this);
&&&&&&&& webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
&&&&&&& // WebBackForwardList history = webview.copyBackForwardList();
&&&&&&&& // if (history != null) {
&&&&&&&& // browserHistoryAdapter = new BrowserHistoryAdapter(history, this);
&&&&&&&& // mGridView.setAdapter(browserHistoryAdapter);
&&&&&&&& // }
&&&&&&& webview.setVisibility(View.VISIBLE);
&&&&&&&& mGridView.setVisibility(View.GONE);
&&& @Override
&&&& public void onClick(View v) {
&&&&&&&& if (v == btnLoad) {
&&&&&&&&&&&& cookieManager.setAcceptCookie(true);
&&&&&&&&&&&& webview.setVisibility(View.VISIBLE);
&&&&&&&&&&&& mGridView.setVisibility(View.GONE);
&&&&&&&&&&& if (!&&.equalsIgnoreCase(etUrl.getText().toString())) {
&&&&&&&&&&&&&&&& webview.loadUrl(etUrl.getText().toString());
&&&&&&&&&&&& }
&&&&&&& } else if (v == btnReset) {
&&&&&&&&&&&& cookieManager.removeAllCookie();
&&&&&&&& } else if (v == btnHistory) {
&&&&&&&&&&&& if (webview.copyBackForwardList() == null) {
&&&&&&&&&&&&&&&&
&&&&&&&&&&&& } else {
&&&&&&&&&&&&&&&& webview.setVisibility(View.GONE);
&&&&&&&&&&&&&&&& mGridView.setVisibility(View.VISIBLE);
&&&&&&&&&&&&&&& if (browserHistoryAdapter == null) {
&&&&&&&&&&&&&&&&&&&& browserHistoryAdapter = new BrowserHistoryAdapter(
&&&&&&&&&&&&&&&&&&&&&&&&&&&& historyModels, this);
&&&&&&&&&&&&&&&&&&&& mGridView.setAdapter(browserHistoryAdapter);
&&&&&&&&&&&&&&& } else {
&&&&&&&&&&&&&&&&&&&& browserHistoryAdapter.setHostory(historyModels);
&&&&&&&&&&&&&&&&&&&& browserHistoryAdapter.notifyDataSetChanged();
&&&&&&&&&&&&&&&& }
&&&&&&&&&&&& }
&&&&&&& } else if (v == btnBack) {
&&&&&&&&&&&& webview.goBack();
&&&&&&&& } else if (v == btnForward) {
&&&&&&&&&&&& webview.goForward();
&&&&&&&& }
&&& // create a webview client that handles mailto links within the webview
&&&& private class BirtMobileWebViewClient extends WebViewClient {
&&&&&&&& @Override
&&&&&&&& public boolean shouldOverrideUrlLoading(WebView view, String url) {
&&&&&&&&&&&& Log.d(&------redirect:-----&, url);
&&&&&&&&&&&&
&&&&&&&& }
&&&&&&& @Override
&&&&&&&& public void onPageStarted(WebView view, String url, Bitmap favicon) {
&&&&&&&&&&&& etUrl.setText(url);
&&&&&&&&&&&& Log.d(TAG + &start:&, url);
&&&&&&&& }
&&&&&&& @Override
&&&&&&&& public void onPageFinished(WebView view, String url) {
&&&&&&&&&&&& HistoryModel historyModel = new HistoryModel();
// 获取history,包含id,name,url等
&&&&&&&&&&& WebHistoryItem item = webview.copyBackForwardList()
&&&&&&&&&&&&&&&&&&& .getCurrentItem();
//为browser history获取浏览器页面快照
&&&&&&&&&&& Picture snapShot = view.capturePicture();
&&&&&&&&&&& if (snapShot.getWidth() & 0 && snapShot.getHeight() & 0) {
&&&&&&&&&&&&&&&& Bitmap b = Bitmap.createBitmap(snapShot.getWidth(),
&&&&&&&&&&&&&&&&&&&&&&&& snapShot.getHeight(), Bitmap.Config.ARGB_8888);
&&&&&&&&&&&&&&& Canvas c = new Canvas(b);
&&&&&&&&&&&&&&&& snapShot.draw(c);
&&&&&&&&&&&&&& Bitmap newBitmap = zoomBitmap(b, 250, 250);
&&&&&&&&&&&&&&&& historyModel.setSnapshot(newBitmap);
&// 写入手机sd卡
//&&&&&&&&&&&&&&& FileOutputStream fos =
&//&&&&&&&&&&&&&&& try {
&//&&&&&&&&&&&&&&& &&&&fos = new FileOutputStream(&/sdcard/& + item.getTitle()
&//&&&&&&&&&&&&&&&&&&&&&&&&&&& + &.jpg&);
&//&&&&&&&&&&&&&&&&&&& if (fos != null) {
&//&&&&&&&&&&&&&&&&&&&&&&& b.pressFormat.JPEG, 90, fos);
&//&&&&&&&&&&&&&&&&&&&&&&& fos.close();
&//&&&&&&&&&&&&&&&&&&& }
&//&&&&&&&&&&&&&&& } catch (Exception e) {
&//&&&&&&&&&&&&&&& }
&//&&&&&&&&&&&&&&& b = BitmapFactory.decodeFile(&/sdcard/& + item.getTitle()
&//&&&&&&&&&&&&&&&&&&&&&&& + &.jpg&);
&&&&&&&&&&&& }
&&&&&&&&&&& historyModel.setId(item.getId());
&&&&&&&&&&&& historyModel.setName(item.getTitle());
&&&&&&&&&&&& historyModel.setUrl(item.getUrl());
&&&&&&&&&&&& historyModels.add(historyModel);
&&&&&&&&&&& Log.d(TAG + &finish:&, url);
&&&&&&&& }
&&&&& * for #43616 from Hyron
&&&&& * @author allen_fang
&&&& private class GeoClient extends WebChromeClient {
&&&&&&& @Override
&&&&&&&& public void onGeolocationPermissionsShowPrompt(String origin,
&&&&&&&&&&&&&&&& android.webkit.GeolocationPermissions.Callback callback) {
&&&&&&&&&&&& super.onGeolocationPermissionsShowPrompt(origin, callback);
&&&&&&&&&&&& callback.invoke(origin, true, false);
&&&&&&&& }
&&&&&&& @Override
&&&&&&&& public void onProgressChanged(WebView view, int newProgress) {
&&&&&&&&&&&& mProgressBar.setProgress(newProgress);
&&&&&&&&&&&& super.onProgressChanged(view, newProgress);
&&&&&&&& }
&&&&&&& @Override
&&&&&&&& public void getVisitedHistory(ValueCallback&String[]& callback) {
&&&&&&&&&&&& super.getVisitedHistory(callback);
&&&&&&&& }
&&& @Override
&&&& public void onDownloadStart(String url, String userAgent,
&&&&&&&&&&&& String contentDisposition, String mimetype, long contentLength) {
& &&&&&&Log.d(&--------------------------&, mimetype);
&&&&&&&& Log.d(&--------------------------&, url);
&&&&&&&& Uri uri = Uri.parse(url);
&&&&&&&& Intent intent = new Intent(Intent.ACTION_VIEW, uri);
&&&&&&&& startActivity(intent);
&&& public static Bitmap zoomBitmap(Bitmap bitmap, int width, int height) {
&&&&&&&& int w = bitmap.getWidth();
&&&&&&&& int h = bitmap.getHeight();
&&&&&&&& Matrix matrix = new Matrix();
&&&&&&&& float scaleWidth = ((float) width / w);
&&&&&&&& float scaleHeight = ((float) height / h);
&&&&&&&& matrix.postScale(scaleWidth, scaleHeight);
&&&&&&&& Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);
摘自fhy_2008的专栏我要做的一个东西是在一个页面的中间嵌入浏览器,一开始不知道从哪里开始,因为以前用的都是Textveiw或者editVeiw之类的控件,而它们并不能用来显示网页的内容,怎么办呢?
首先想到的是:是不是有一个用来显示网页的View呢,于是我就在eclipse里xml编辑器里输入&web,哈哈,果然下面有个提示是webVeiw,那么能不能用它呢?于是到网上搜一下它的资料,果然可以的,下面就开始吧。
先在xml里把webview建好,在代码里用findViewById()将其取出来。我的代码是:
WebView webView = (WebView)this.findViewById("@/id/webview");
紧接着就用到了从网上找的内容了,慢慢看吧。
如何创建WebView:
&&& 1、添加权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。&&& 2、在要Activity中生成一个WebView组件:WebView webView = new WebView(this);&&& 3、设置WebView基本信息:&&&&&&&&& 如果访问的页面中有Javascript,则webview必须设置支持Javascript。&&&&&&&&& webview.getSettings().setJavaScriptEnabled(true);&&&&&&&&&&& 触摸焦点起作用&&&&&&&&& requestFocus();//如果不设置,则在点击网页文本输入框时,不能弹出软键盘及不响应其他的一些事件。&&&&&&&&& 取消滚动条&&&&&&&&& this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);&&& 4、设置WevView要显示的网页:&&&&&&&&& 互联网用:webView.loadUrl("");&&&&&&&&& 本地文件用:webView.loadUrl("file:///android_asset/XX.html");& 本地文件存放在:assets文件中&&& 5、如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。&&&&&&&&& 给WebView添加一个事件监听对象(WebViewClient)&&&&&&&&&&&&&&&&&&&&&&& 并重写其中的一些方法&&&&&&&&&&&&&&& shouldOverrideUrlLoading:对网页中超链接按钮的响应。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url&&&&&&&&&&&&&&& onLoadResource&&&&&&&&&&&&&&&&&& onPageStart&&&&&&&&&&&&&&&&& onPageFinish&&&&&&&&&&&&&&&&& onReceiveError&&&&&&&&&&&&&&& onReceivedHttpAuthRequest
&&& 6、如果用webview点链接看了很多页以后,如果不做任何处理,点击系统&Back&键,整个浏览器会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。&&&&&& 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。&&& public boolean onKeyDown(int keyCoder,KeyEvent event){&&&&&&&&&&&&&&&&&&&&&&& if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){&&&&&&&&&&&&&&&&&&&&&&&&&&&&& webview.goBack();&& //goBack()表示返回webView的上一页面
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&WebView相关问题注意:
Android的webView很强大,其实就是一个浏览器,你可以把它嵌入到你想要的位置,我这里遇到两个问题,就是怎么知道网页的加载进度和加载网页时,点击网页里面的链接还是在当前的webview里跳转,不想跳到浏览器那边,解决办法如下://此方法可以处理webview 在加载时和加载完成时一些操作webView.setWebChromeClient(new WebChromeClient(){&&@Override&&public void onProgressChanged(WebView view, int newProgress) {& & if(newProgress==100){& && && && && && && && &// 这里是设置activity的标题, 也可以根据自己的需求做一些其他的操作& && && & title.setText("加载完成");& &&&}else{& &&&title.setText("加载中.......");& && &}& & }});webView.setWebViewClient(new WebViewClient(){&&@Override& & public boolean shouldOverrideUrlLoading(WebView view, String url) {&&//重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边& && & view.loadUrl(url);& && &&&}& && &&&@Overridepublic
void onReceivedSslError(WebView view, SslErrorHandler handler,
android.net.http.SslError error) { // 重写此方法可以让webview处理https请求handler.proceed();}});
阅读(...) 评论()}

我要回帖

更多关于 安卓app 壳子 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信