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屬性,去執行獲取寬度,這樣,是同步載入,所以會等到你的圖片載入完成去取,如果還是不行就可以採取延時獲取寬度。