當前位置:首頁 » 安卓系統 » androidwebview圖片點擊

androidwebview圖片點擊

發布時間: 2022-09-09 22:08:19

Ⅰ android 怎麼獲取webview 的控制項的點擊

1. Web網頁部分,需要用javascript實現監聽點擊事件,獲取被點擊項及其電話號碼,用jQuery等庫,這個功能很容易實現。
2. 在點擊事件裡面,調用「打電話」或「發簡訊」方法,例如"window.JSExt.call(number);"。
3. 在Java代碼裡面,實現「打電話」/「發簡訊」的介面,並注冊到WebView裡面,這樣Javascript才能調用,例如

class JSExt {

public void call(String number) {

...

}

public void sms(String number, String txt) {

...

}

}

...

mWebView.addJavascriptInterface(new JSExt(), 'JSExt');

Ⅱ 關於Android WebView的那些事

[TOC]

Webkit是一個開源瀏覽器項目,其中,對Android開發者來說,或多或少的都有些接觸。 在應用層來看,最經常使用無非這么幾個類:WebView(Android中最為復雜,也是最為簡單的一個View,繼承自AbsoluteLayout),WebViewClient、WebChromeClient(作為回調控制類)、WebSettings(進行設置項的配置)等;Webkit內部包含了網路請求、頁面渲染、Js引擎等等。在Android4.4之前的版本中,系統使用的是Webkit內核,其後,切換到Google的Chromium內核。本文主要介紹的是在Android中,如何使用Webkit進行H5頁面的展現,以及常見問題的分析手段。

下面的內容抄自網路 & 亂七八糟的地方,簡單了解一下。

<b><i>前面都是吹牛逼的信息,如何使用Webkit來更好的搬磚? 且聽如下分解</i></b>

XML布局中丟一個 <WebView> 標簽,然後再 Activity 或者 Fragment 中 findViewById ,進而 loadUrl ,一般也沒人這么簡單的用,除非寫Demo。很簡單,它就是一個Layout,提供了一個調用載入頁面的介面,不寫範例了,能看到這篇文章的都看過Google的API說明。

主要涉及到WebView和WebSettings兩個類。

例如:

其實就是WebView的父類ViewGroup和View的方法,不多說了。不過需要注意的是,不是所有的View或ViewGroup的方法對WebView都生效。

列舉幾類常用的,幾乎所有App的 WebView 都會設置的屬性:

</br>

如何處理頁面跳轉以及特殊 Scheme

這個回調可以說是最容易出問題的一個回調,表示什麼? 字面意思,讓你重寫這個URL 的loading,比如點擊html打電話的一個 <a href=「tel:110」> 標簽,作為一個有節操、有責任心的瀏覽器,你需要處理 H5常用的幾個Scheme :

除此之外,還有各個應用自定義的scheme ,舉個例子,支付寶的支付Scheme : alipay: 。 這里的返回值,就代表你有沒有能力處理這個url,沒有的話Webkit就默認處理了。
需要注意的是,這個回調的觸發的絕大多數情況是點擊頁面的 <a href="xxxx"> a標簽,在Android中 loadUrl("http://www..com") ,是不會回調的,為什麼不會回調,各位自行理解吧。

超鏈接 <a> 標簽怎麼寫: 點我
特別說下窗口常見的兩種打開方式:

針對單頁模式的WebView框架(所有的html窗口均使用同一個WebView實例),不需要關注target的。
如果作為一個成熟的瀏覽器框架的話,是需要支持Html、JavaScript使用新窗口打開頁面,需要實現如下回調:

還有一個相關設置項: WebSettings.
此時,系統將不會再回調 shouldOverrideUrlLoading 。新窗口邏輯的具體實現機制,可以參考系統browser實現邏輯。

<b> 這里有個坑 </b>
Android 4.4版本 ,如果實現了onCreateWindow,也就是說頁面 <a> 標簽是這么寫的: <a href="http://www..com" target="_blank"> ,點擊此鏈接打開的新WebView窗口,此窗口中的url點擊,是不會觸發 shouldOverrideUrlLoading 。 這是剛替換成Chrominum內核出的一個bug。本人並沒在新版本上驗證是否已經修復。

另外,根據不同的Rom,底層實現是不一樣的,有的ROM會幫你處理各種調起scheme,也就是startActivity,有的ROM點一個url,就會拋一個intent出來,讓用戶選擇系統瀏覽器進行載入。

系統默認,提供了一個介面:

有什麼安全隱患呢?
戳這里

如果不知道Js怎麼寫, 請戳我

用PC的截圖意思一下,看出區別了吧。 這里確定、取消點擊以後就得調用 JsResult、JsPromptResult 的 confirm或者cancel。

因為安全問題,大一些的App Native與Js通信都不再用 WebView.addJavascriptInterface(Object) 了,都改用JsPrompt,因為JsPrompt中有message、有JsPromptResult可以返回給Js一些信息,所以橋選中了JsPrompt,另一個備選方案是JsConsole。

大體有這么幾種方式進行傳遞

具體方案實現時,多方面考慮使用何種方式。

還有一個比較牛逼的

系統源碼中均有方法注釋,怎麼用自己看吧。
那麼問題來了

查了下,只有這兩個相關的:
WebBackForwardList BackForwardList()
void clearHistory()
系統提供的關於歷史記錄的操作並不多,因為,不支持單條刪除啊,啊啊啊!
WebViewClient中,還有一個相關callback,當系統更新歷史記錄時回調:
void doUpdateVisitedHistory(WebView view, String url, boolean isReload)

<b>相關問題分析法:歷史棧回退錯誤的定位</b>

絕大多數回退錯誤是由於介面調用、回調中邏輯執行時序錯誤。
定位方法:利用 BackForwardList , doUpdateVisitedHistory 兩個介面在 loadUrl、onPageStart、onPageFinish 以及邏輯相關的地方調用,打log,查看歷史棧,這里注意下由於loarl是非同步的,需要考慮是否加延遲等等保證調用時機的准確。
本人曾經遇到一個問題:在WebChromeClient中的 JsPrompt回調中,直接進行WebView.goBack操作,結果發現WebView確實回退到上一個頁面,但是BackFowardList當前頁面的index未更新的問題,具體見另一個篇blog。

網上有很多關於WebView內存泄露的討論,據傳,老版本的WebView在展示大量圖片的時候,即使 WebView.destory() WebView=null ,也不會銷毀。
在新版本上,實際測試結果:compileSDKVersion 23 不會泄露。
一般,我們如何銷毀WebView比較保險?

這個問題好大。。。
暫時不介紹,另起blog進行說明。

解決方案:
實現回調 void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)

首先,提幾個需要注意的點:

個人歸納總結幾點:

step1 進入開發者模式,勾選「顯示布局邊界」;
step 2,回到你想查看的界面; step 3 假如內容區只有一層基本就是H5 WebView的,多個層級,就是Native。

看到左右圖的差異了吧。
還有另一種方法,RD屌絲們看這里,特別說明,這種方法不太適合瀏覽器。 (自有內核,可能會不準確)

好了,就介紹到這里,零零散散的幾年前寫的文章,第一篇blog,如有不對的地方,還懇請大家指正。

Ⅲ android 怎樣獲取webview的緩存

請求的url記錄是保存在webviewCache.db,而url的內容是保存在webviewCache文件夾下.

為了便於理解,接下來模擬一個案例,定義一個html文件,在裡面顯示一張圖片,用WebView載入出來,然後再試著從緩存里把這張圖片讀取出來並顯示。

第一步:新建一個Android工程命名為WebViewCache.目錄結構如下:

第二步:在assets目錄下新建一個html文件,命名為index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>WebViewCacheDemo</title>

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

</head>

<body>
<img src="http://img04.taobaocdn.com/imgextra/i4/608825099/T2nGXBXXpaXXXXXXXX_!!608825099.jpg_310x310.jpg"/>
</body>
</html>

第三步:修改main.xml布局文件,一個WebView控制項一個Button(點擊載入緩存圖片用),代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<WebView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/webView"/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="從緩存讀取圖片"
android:id="@+id/button"/>
</LinearLayout>

第四步:修改主核心程序WebViewCacheDemo.java,這里我只載入了index.html文件,按鈕事件暫時沒寫,代碼如下:

package com.ljq.activity;

import java.io.File;
import java.io.FileInputStream;

import android.app.Activity;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.ImageView;

public class WebViewActivity extends Activity {
private WebView webView;
private static final String url="file:///android_asset/index.html";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

webView=(WebView)findViewById(R.id.webView);
webView.loadUrl(url);
}
}

第五步:在AndroidMainifest.xml文件中加訪問網路的許可權:
<uses-permission android:name="android.permission.INTERNET" />

Ⅳ android用WebView顯示本地網頁webview.loadUrl("file:///android_asset/haitian.htm"); 圖片顯示不出來。

webView顯示不了圖片,那肯定是html中的圖片引入寫錯了,WebView(網路視圖)能載入顯示網頁,可以將其視為一個瀏覽器。它使用了WebKit渲染引擎載入顯示網頁。
如果顯示有問題,建議按以下方式去實現:
第一種方法的步驟:
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"/>

Ⅳ android怎麼模擬用戶在webview中對應的坐標的點擊事件

可以直接調用它的監聽者,低版本方法是performclick,高版本是callonclick,比如你虛擬手指的初始化的對象是a,你給它設置了動作監聽,你點擊屏幕下方的按鈕時,這個按鈕的動

Ⅵ 如何學習Android5.0 下 新的 webview 的實現

Android webview使用詳解
1. 打開網頁時不調用系統瀏覽器, 而是在本WebView中顯示:

mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});

2. 通過java代碼調用javascript

WebSettings webSettings = mWebView .getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
webview.loadUrl("javascript:wave()");
}
});
}
}, "demo");

3. 按返回鍵時, 不退出程序而是返回上一瀏覽頁面:

public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}

4. 打開頁面時, 自適應屏幕:
WebSettings webSettings = mWebView .getSettings();
webSettings.setUseWideViewPort(true);//設置此屬性,可任意比例縮放
webSettings.setLoadWithOverviewMode(true);

5. 便頁面支持縮放:
WebSettings webSettings = mWebView .getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setSupportZoom(true);

6.如果webView中需要用戶手動輸入用戶名、密碼或其他,則webview必須設置支持獲取手勢焦點。
webview.requestFocusFromTouch();

7.WebView 載入界面主要調用三個方法:LoadUrl、LoadData、LoadDataWithBaseURL.
1、LoadUrl 直接載入網頁、圖片並顯示.(本地或是網路上的網頁、圖片、gif)
2、LoadData 顯示文字與圖片內容 (模擬器1.5、1.6)
3、LoadDataWithBase 顯示文字與圖片內容(支持多個模擬器版本)

8.WebSettings 的常用方法介紹

setJavaScriptEnabled(true); //支持js
setPluginsEnabled(true); //支持插件
setUseWideViewPort(false); //將圖片調整到適合webview的大小
setSupportZoom(true); //支持縮放
setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持內容重新布局
supportMultipleWindows(); //多窗口
setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //關閉webview中緩存
setAllowFileAccess(true); //設置可以訪問文件
setNeedInitialFocus(true); //當webview調用requestFocus時為webview設置節點

webview webSettings.setBuiltInZoomControls(true); //設置支持縮放
(true); //支持通過JS打開新窗口

setLoadWithOverviewMode(true); // 縮放至屏幕的大小
setLoadsImagesAutomatically(true); //支持自動載入圖片

9.WebViewClient 的方法全解

doUpdateVisitedHistory(WebView view, String url, boolean isReload) //(更新歷史記錄)

onFormResubmission(WebView view, Message dontResend, Message resend) //(應用程序重新請求網頁數據)

onLoadResource(WebView view, String url) // 在載入頁面資源時會調用,每一個資源(比如圖片)的載入都會調用一次。

onPageStarted(WebView view, String url, Bitmap favicon) //這個事件就是開始載入頁面調用的,通常可以在這設定一個loading的頁面,告訴用戶程序在等待網路響應。
onPageFinished(WebView view, String url) //在頁面載入結束時調用。同樣道理,咱們知道一個頁面載入完成,於是可以關閉loading 條,切換程序動作。

onReceivedError(WebView view, int errorCode, String description, String failingUrl)// (報告錯誤信息)

onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host,String realm)//(獲取返回信息授權請求)

onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) //重寫此方法可以讓webview處理https請求。

onScaleChanged(WebView view, float oldScale, float newScale) // (WebView發生改變時調用)

onUnhandledKeyEvent(WebView view, KeyEvent event) //(Key事件未被載入時調用)

shouldOverrideKeyEvent(WebView view, KeyEvent event)//重寫此方法才能夠處理在瀏覽器中的按鍵事件。

shouldOverrideUrlLoading(WebView view, String url)
//在點擊請求的是鏈接是才會調用,重寫此方法返回true表明點擊網頁裡面的鏈接還是在當前的webview里跳轉,不跳到瀏覽器那邊。這個函數咱們可以做很多操作,比如咱們讀取到某些特殊的URL,於是就可以不打開地址,取消這個操作,進行預先定義的其他操作,這對一個程序是非常必要的。

Ⅶ Android:最全面的 Webview 詳解

WebView是一個基於webkit引擎、展現web頁面的控制項。

一般來說Webview可單獨使用,可聯合其子類一起使用,所以接下來,我會介紹:

常見用法:Back鍵控制網頁後退

配置步驟1:添加訪問網路許可權 (AndroidManifest.xml)

配置步驟2:生成一個WebView組件(有兩種方式)

配置步驟3:進行配置-利用WebSettings子類 (常見方法)

常見用法:設置WebView緩存

注意: 每個 Application 只調用一次 WebSettings.setAppCachePath(),WebSettings.setAppCacheMaxSize()

常見方法1:shouldOverrideUrlLoading()

常見方法2:onPageStarted()

常見方法3:onPageFinished()

常見方法4:onLoadResource()

常見方法5:onReceivedError()

常見方法6:onReceivedSslError()

常見方法1: onProgressChanged()

常見方法2: onReceivedTitle()

具體請看我寫的文章 Android WebView與JS的交互方式 最全面匯總

3.4.1 不在xml中定義 Webview ,而是在需要的時候在Activity中創建,並且Context使用 getApplicationgContext()

3.4.2 在 Activity 銷毀( WebView )的時候,先讓 WebView 載入null內容,然後移除 WebView,再銷毀 WebView,最後置空。

步驟1:添加訪問網路許可權

AndroidManifest.xml

步驟2:主布局
activity_main.xml

步驟3:根據需要實現的功能從而使用相應的子類及其方法(注釋很清楚了)
MainActivity.java

Ⅷ 手機是android 9.0系統 使用webView載入圖片不顯示,求解

產生原因原因
主要是由於android9.0以上google做了一個未加密流量訪問的限制(不知道是什麼鬼)
解決方法如下:
在Android 的mainfest.xml中的application添加一句配置android:usesCleartextTraffic=「true」
<?xml version="1.0" encoding="utf-8"?>
<application
android:usesCleartextTraffic="true">
</application>
</manifest>

熱點內容
linux安裝sqlite 發布:2025-01-10 19:09:43 瀏覽:80
java工程師證 發布:2025-01-10 18:54:02 瀏覽:34
python如何判斷密碼強度 發布:2025-01-10 18:39:58 瀏覽:982
安卓怎麼快捷關程序 發布:2025-01-10 18:35:48 瀏覽:924
仔細的演算法 發布:2025-01-10 18:28:30 瀏覽:548
c語言判斷是否為迴文數 發布:2025-01-10 18:21:31 瀏覽:786
win7vhd加密 發布:2025-01-10 18:20:35 瀏覽:423
手機存儲空間里的其他怎麼清理 發布:2025-01-10 18:19:59 瀏覽:803
二手的電腦伺服器都怎麼處理了 發布:2025-01-10 18:19:05 瀏覽:909
定壓補水裝置如何配置 發布:2025-01-10 18:12:34 瀏覽:433