Android实现简易浏览器遇到问题的解决方法
作者:楊先生 发布时间:2023-06-15 21:47:56
最近没事写了一个简易浏览器,在刚开始写的时候遇到一些问题,主要的问题就是如何在自己的webview中显示所有的网页数据,不过不指定自己的webview显示所有网页数据则会调用系统默认的webview来加载数据,所以解决的办法就是用webview的setWebViewClient()方法设置自己的webviewclient对象,这个对象就是专门负责网页url与webview绑定的类,重写当中的shouldOverrideUrlLoading(WebView view, String url)方法,把view换成自己的webview就OK了。
当按回退键盘的时候返回历史页面可以重写activity的onkeydown()方法拦截回退键事件,然后判断webview.canGoBack(),返回true就webview.goback()就行了。
如过还想加上放大/放小 控制按钮就必须先设置webView是支持zoomControls的,设置方法是通过web_content.getSettings().setSupportZoom(true),然后通过webview.getZoomControls()方法得到zoomControls的view,再通过getWindow().getDecorView() .findViewById(Android.R.id.content)得到webview的显示内容的空间,现在就只用把刚刚得到得zoomControls加到webview的内容空间中就OK了。还有1个问题就是当webview上方出现edittext空间时如果webview中也同时出现(比如:百度,google中的输入框)时就会出现焦点冲突问题,解决方法就是实现webview的setOnTouchListener事件,在事件中设置webview.requestFocus()就行了.
还是贴上源码吧:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init() {
web_content = (WebView) findViewById(R.id.web_content);
WebSettings set = web_content.getSettings();
set.setSupportZoom(true);
set.setJavaScriptEnabled(true);
set.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
View control = web_content.getZoomControls();
FrameLayout layout = (FrameLayout) getWindow().getDecorView()
.findViewById(android.R.id.content);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM
| Gravity.RIGHT);
params.bottomMargin = 10;
params.rightMargin = 10;
layout.addView(control, params);
web_content.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
web_content.requestFocus();
return false;
}
});
web_content.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
tx_address.setText(url);
return true;
}
});
web_content.loadUrl(parseUrl(defaultPage));
}
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 客户端获取后台支付API请求参数的设计参数样例:{data: {method: 1,platform: 1,version:"1.
- 一种方法是可以在窗体的属性面板将窗体的 ControlBox属性设置为false,或者在窗体的构造函数中这样写:public F
- 本文主要介绍Android实现拍照、录像、录音代码的资料,这里整理了详细的代码,有需要的小伙伴可以参考下。RecordActivity.ja
- 某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删
- 在项目中我们肯定不能使用Spring自己生成的登录页面,而要用我们自己的登录页面,下面讲一下如何自定义登录页面,先看下配置<sec:h
- 本文实例讲述了android编程之ip2id程序。分享给大家供大家参考。具体分析如下:一、说明:公司一个项目中需要给一系列网络设备分配id号
- 使用maven的profile功能,我们可以实现多环境配置文件的动态切换,可参考我的上一篇博客。但随着SpringBoot项目越来越火,越来
- 我们用NuGet还原.NET Core项目会报以下错误:error NETSDK1064: 未找到版本为 1.8.2 的包 BouncyCa
- 1、概述 限流的含义是在单位时间内确保发往某个模块的请求数量小于某个数值,比如在实现秒杀功能时,需要确保在10秒内发往支付模块的请求数量小
- spring.activemq.pool.enabled=false时,每发送一条数据都需要创建一个连接,这样会出现频繁创建和销毁连接的场景
- 在 Effecitve Java 一书的第 48 条中提到了双重检查模式,并指出这种模式在 Java 中通常并不适用。该模式的结构如下所示:
- Spring Cache设置缓存条件原理从Spring3.1开始,Spring框架提供了对Cache的支持,提供了一个对缓存使用的抽象,通过
- 前言记一次为了节省代码没有在方法体中声明HttpServletRequest,而用autowire直接注入所钻的坑结论:给心急的人。 直接在
- 最近在开发中遇到一个关于Java方法重写的一些问题,对于方法重写的用法以及可能导致的问题产生了一些思考,本文用于记录下这些想法。问题场景我们
- 最近经常有人问Spring Cloud Feign如何上传文件。有团队的新成员,也有其他公司的兄弟。本文简单做个总结——早期的Spring
- 本文实例为大家分享了Android实现拍照或者选取本地图片的具体代码,供大家参考,具体内容如下总体流程从selectPhotoActivit
- 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。对于文件上传,浏览器在上
- 1.工作原理(算法思路)给定一个待排序数组,找到数组中最小的那个元素如果最小元素不是待排序数组的第一个元素,则将其和第一个元素互换在剩下的元
- Maven是个很好用的管理工具,不经能够管理jar,还能实现打包。这里讲解Maven 本地打包,服务器打包,可以全部交给jenkins去完成
- 这篇实例中有四个类,分别为CacheItem 缓存实体类CachePool 缓存池Student 学生实