androidwebview粘贴
㈠ Android WebView 在开发过程中有哪些坑
WebView:
(一)、介绍:
android提供了一个内置浏览器,该浏览器可以查看网站,查看邮件,播放视频。要使用该内置浏览器,要通过WebView组件实现。webView组件式专门用来浏览网页的。
类结构:
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.AbsoluteLayout
↳ android.webkit.WebView
(二)、webview组件常用方法:
loadUrl()
loadData()
loadDataWithBaseURL()
capturePicture()
goBack()
goForward()
stopLoading()
reload()
(三)、WebView组件显示url页面的内容:
1、基本代码:
webView_main = (WebView) findViewById(R.id.webView_main);
webView_main.loadUrl("http://www.qq.com");
(四)、WebView组件加载html代码:
1、基本代码:
webView_main = (WebView) findViewById(R.id.webView_main);
// webView_main.loadData(data, "text/html","utf-8");//这个方法中虽然设置了字符集,但是运行效果中发现依然中文会显示乱码。为了解决这个问题,建议使用loadDataWithBaseURL()方法。
webView_main.loadDataWithBaseURL(null, data, "text/html", "utf-8", null);
【备注:】MIME
概念:MIME意为多功能Internet邮件扩展,它设计的最初目的是为了在发送 电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显着了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。
每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
常见的MIME类型(通用型):
超文本标记语言文本 .html text/html
xml文档 .xml text/xml
XHTML文档 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文档 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG图像 .png image/png
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二进制数据 application/octet-stream
2、如果加载的html代码中包含javascript语言,会如何呢?
运行后发现,所有的javascript都不会执行。因为WebView 在默认情况下不支持javascript。如何让执行javascript呢?
让WebView支持javascript的两个步骤:
使用 WebView 组件的WebSettings对象的setJavaScriptEnabled()方法。这种做法是让 WebView 能支持绝大多数的javascript语言。但是依然不支持alert等警告对话框语句。
使用 WebView 组件的setWebChromeClient()方法。这种做法是让 WebView 也支持显示alert等警告对话框
基本代码:
webView_main.getSettings().setJavaScriptEnabled(true);// 支持运行javascript
webView_main.setWebChromeClient(new WebChromeClient());// 支持运行特殊的javascript(例如:alert())
webView_main.setWebViewClient(new WebViewClient());// 当点击超链地址后不会新打开浏览器来访问,而是始终在本app中浏览页面
3、如果html中包含有超级链接地址,WebView能顺利执行吗?
经过运行后发现,WebView中的超链地址在点击后,会跳出该应用程序,而弹出新的浏览器去访问该网页。
如果解决呢?调用webview对象的setWebViewClient()方法即可解决。
webView_main.setWebViewClient(new WebViewClient());
(五)、用WebView实现“网页版天气预告”
【备注:】调用页面地址:http://m.weather.com.cn/m/pn12/weather.htm?id=101010100T
webView_main = (WebView) findViewById(R.id.webView_main);
webView_main.getSettings().setJavaScriptEnabled(true);
webView_main.setWebChromeClient(new WebChromeClient());
webView_main.setWebViewClient(new WebViewClient());
webView_main.loadUrl("http://m.weather.com.cn/m/pn12/weather.htm?id=101010100T");
(六)、制作简单的网页浏览器:
1、核心代码:
publicclass MainActivity extends Activity {
privateEditText editText_main_url;
privateWebView webView_main;
private String url = "";
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText_main_url = (EditText) findViewById(R.id.editText_main_url);
webView_main = (WebView) findViewById(R.id.webView_main);
// 让webview对象支持解析javascript语句
webView_main.getSettings().setJavaScriptEnabled(true);
// 让webview对象支持解析alert()等特殊的javascript语句
webView_main.setWebChromeClient(new WebChromeClient());
// 如果不使用该句代码,在点击超链地址后,会跳出程序,而弹出浏览器访问网页。
webView_main.setWebViewClient(new WebViewClient());
}
publicvoid clickButton(View view) {
switch (view.getId()) {
// 浏览器中后退键监听
caseR.id.button_main_goback:
webView_main.goBack();
break;
// 浏览器前进键监听
caseR.id.button_main_goforward:
webView_main.goForward();
break;
// 当输入网址后,点击该按钮,可以执行访问
caseR.id.button_main_submit:
url = editText_main_url.getText().toString();
if ((url == null) || url.equals("")) {
Toast.makeText(MainActivity.this, "请输入url地址!", Toast.LENGTH_LONG).show();
} else {
if (url.indexOf("http://") != 0) {
url = "http://" + url;
}
webView_main.loadUrl(url);
}
break;
// 浏览器停止加载键监听
caseR.id.button_main_stop:
webView_main.stopLoading();
break;
// 浏览器刷新键监听
default:
break;
}
}
}
㈡ android加载webview有哪几种方式
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法:
第一种方法的步骤:
1.在要Activity中实例化WebView组件:WebView webView = new WebView(this);
2.调用WebView的loadUrl()方法,设置WevView要显示的网页:
互联网用:webView.loadUrl("http://www.google.com");
本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中
3.调用Activity的setContentView( )方法来显示网页视图
4.用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
5.需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。
<uses-permission android:name="android.permission.INTERNET" />
第二种方法的步骤:
1、在布局文件中声明WebView
2、在Activity中实例化WebView
3、调用WebView的loadUrl( )方法,设置WevView要显示的网页
4、为了让WebView能够响应超链接功能,调用setWebViewClient( )方法,设置 WebView视图
5、用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
6、需要在AndroidManifest.xml文件中添加权限,否则出现Web page not available错误。
<uses-permission android:name="android.permission.INTERNET"/>
㈢ webview怎么禁止系统的复制粘贴条出现
有些项目特别喜欢用html,虽然用户体验很差。。。
最近做的项目发现一个问题,就是长按,那些html页面就会弹出黏贴复制,要禁止复制黏贴的出现,其实就是实现webview的setOnLongClickListener方法,如下:
this.appView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
return true;
}
});
㈣ Android的WebView有哪些坑
下面说说我比较困惑的几个地方。
1.WebViewClient.onPageFinished()。你永远无法确定当WebView调用这个方法的时候,网页内容是否真的加载完毕了。当前正在加载的网页产生跳转的时候这个方法可能会被多次调用,StackOverflow上有比较具体的解释(How to listen for a Webview finishing loading a URL in Android?), 但其中列举的解决方法并不完美。所以当你的WebView需要加载各种各样的网页并且需要在页面加载完成时采取一些操作的话,可能WebChromeClient.onProgressChanged()比WebViewClient.onPageFinished()都要靠谱一些。
2.WebView后台耗电问题。当你的程序调用了WebView加载网页,WebView会自己开启一些线程(?),如果你没有正确地将WebView销毁的话,这些残余的线程(?)会一直在后台运行,由此导致你的应用程序耗电量居高不下。对此我采用的处理方式比较偷懒,简单又粗暴(不建议),即在Activity.onDestroy()中直接调用System.exit(0),使得应用程序完全被移出虚拟机,这样就不会有任何问题了。
3.切换WebView闪屏问题。如果你需要在同一个ViewGroup中来回切换不同的WebView(包含了不同的网页内容)的话,你就会发现闪屏是不可避免的。这应该是Android硬件加速的Bug,如果关闭硬件加速这种情况会好很多,但无法获得很好的浏览体验,你会感觉网页滑动的时候一卡一卡的,不跟手。
4.数据积累问题。开启缓存什么的有利于网页的浏览体验,但你会发现即使是清除了必要的内容,比如Cache、Cookie、Form Data、History、Password等等东西,你的应用程序所占用的存储空间还是会越来越大,到最后只好手动到系统设置的应用信息界面里清除数据了 :(
5.滚动条问题。Android System WebView的横向滚动条真是好粗的有木有...
6.注意4.4系统前后的区别,在这个版本里面谷歌把webview的内核换成谷歌浏览器的!
7.在webview中进行JavaScript交互时也要注意,出于对安全性的考虑,在设置与JavaScript有关的选项时,需要在所在方法的前面加上@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" }),不然4.2以上调用js会出现问题;
8.在调用loaddata方法时注意与loaddatawithurl的区别,前者要注意编码问题而且容易出于乱码问题,后者默认utf8编码!
另外针对Android System WebView的相关开发,推荐看看Google官方的示例教程 GoogleChrome/chromium-webview-samples · GitHub
㈤ android webview问题
在webView的上面放一张图片
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
// 当加载到100%的时候 表示加完成了
if (progress == 100) {
progressBar.setVisibility(View.GONE);
}
}
});
㈥ android 设置webview输入文本框 怎么样支持粘贴
你可以在androidManifest.xml文件中设置你webview所在的Activity属性android:windowSoftInputMode="adjustPan" 就可以了,如果不行,把adjustPan换成adjustResize
㈦ android webview 插入JS修改网页内容
JS代码:
//根据class名称获取div数组
function getClass(parent,sClass)
{
var aEle=parent.getElementsByTagName('div');
var aResult=[];
var i=0;
for(i<0;i<aEle.length;i++)
{
if(aEle[i].className==sClass)
{
aResult.push(aEle[i]);
}
};
return aResult;
}
function hideOther()
{
getClass(document,'nav-sides')[0].style.display='none';
getClass(document,'side-bar')[0].style.display='none';
getClass(document,'area-main')[0].style.display='none';
getClass(document,'home-foot')[0].style.display='none';
getClass(document,'enter')[0].style.display='none';
getClass(document,'crumb')[0].style.display='none';
getClass(document,'date-tab clearfix')[0].style.display='none';
document.getElementById('id_sidebar').style.display='none';
document.getElementById('top_nav').style.display='none';
document.getElementById('fix-personal').style.display='none';
document.getElementById('waterlogo').style.display='none';
getClass(document,'wrap')[0].style.minWidth=0;
getClass(document,'game')[0].style.paddingTop=0;
}
然后在WebViewClient的onPageFinished判断url,加载我们的js代码。
然后你的设置webview即可。
@Override
public void onPageFinished(WebView view, String url) {
if(url!=null && url.contains("/p/resource/weapon/iProctID/39")){
String fun="javascript:function getClass(parent,sClass) { var aEle=parent.getElementsByTagName('div'); var aResult=[]; var i=0; for(i<0;i<aEle.length;i++) { if(aEle[i].className==sClass) { aResult.push(aEle[i]); } }; return aResult; } ";
view.loadUrl(fun);
String fun2="javascript:function hideOther() {getClass(document,'nav-sides')[0].style.display='none'; getClass(document,'side-bar')[0].style.display='none'; getClass(document,'area-main')[0].style.display='none'; getClass(document,'home-foot')[0].style.display='none'; getClass(document,'enter')[0].style.display='none'; getClass(document,'crumb')[0].style.display='none';getClass(document,'date-tab clearfix')[0].style.display='none'; document.getElementById('id_sidebar').style.display='none'; document.getElementById('top_nav').style.display='none'; document.getElementById('fix-personal').style.display='none'; document.getElementById('waterlogo').style.display='none';getClass(document,'wrap')[0].style.minWidth=0;getClass(document,'game')[0].style.paddingTop=0;}";
view.loadUrl(fun2);
view.loadUrl("javascript:hideOther();");
}
super.onPageFinished(view, url);
}
㈧ android下WebView的使用问题
你没找到对象啊,在oncreate函数里面找myWebview,把这个对象保存成全局变量就好。
我的意思就是把findWindowbyid那句拿到 mHandler = new Handler()上面就好。。。。
WebView myWebView 拿到static Handler mHandler = null;下面做成全局变量。。。。
㈨ android webView问题 高手进来看 回答好的另加分!!!
你的图片如果是js动态生成的话就直接把获取宽度的代码放在生成图片的后面就行,如果是html中的,建议在body标签中加入onload属性,去执行获取宽度,这样,是同步加载,所以会等到你的图片加载完成去取,如果还是不行就可以采取延时获取宽度。