android載入html頁面
『壹』 android嵌入h5,怎麼交互
Android和H5之間的交互
hybrid App開發也不是什麼新鮮事了,其中native和h5之間的交互則是必不可少的。Android中是如何和H5交互的?
1、webView載入頁面
我們都知道在Android中是通過webView來載入html頁面的,根據HTML文件所在的位置不同寫法也不同:
//例如:載入assets文件夾下的test.html頁面
mWebView.loadUrl("file:///android_asset/test.html")
//例如:載入網頁
mWebView.loadUrl("http://www..com")
如果只是這樣調用mWebView.loadUrl()載入的話,那麼當你點擊頁面中的鏈接時,頁面將會在你手機默認的瀏覽器上打開。那如果想要頁面在App內中打開的話,那麼就得設置setWebViewClient:
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mWebView.loadUrl(url);
return true;
}
}
});
2、Android本地通過java調用HTML頁面中的JavaScript方法
想要調用js方法那麼就必須讓webView支持
WebSettings webSettings = mWebView.getSettings();
//設置為可調用js方法
webSettings.setJavaScriptEnabled(true);
若調用的js方法沒有返回值,則直接可以調用mWebView.loadUrl("JavaScript:do()");其中do是js中的方法;若有返回值時我們可以調用mWebView.evaluateJavascript()方法:
mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value=" + value);
}
});
js代碼如下:
<script type="text/javascript">
function sum(a,b){
return a+b;
}
function do(){
document.getElementById("p").innerHTML="hello world";
}
</script>
2、js調用Android本地Java方法
在Android4.2以上可以直接使用@JavascriptInterface註解來聲明,下面是在一個本地Java方法
public class JsInteration {
@JavascriptInterface
public String back() {
return "hello world";
}
}
定義完這個方法後再調用mWebView.addJavascriptInterface()方法:
mWebView.addJavascriptInterface(new JsInteration(), "android");
那麼在js中怎麼來調用呢?
<script type="text/javascript">
function s(){
//調用Java的back()方法
var result =window.android.back();
document.getElementById("p").innerHTML=result;
}
</script>
4、攔截HTML頁面中的點擊事件
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//判斷url攔截事件
if (url.equals("file:///android_asset/test2.html")) {
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});
以上就是Java調用js方法以及js調用Java方法的實現交互方式中的一種。下面給出完整代碼:
mainActivity
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webView);
mWebView.loadUrl("file:///android_asset/test.html");
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JsInteration(), "android");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.equals("file:///android_asset/test2.html")) {
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});
}
//Android調用有返回值js方法
@TargetApi(Build.VERSION_CODES.KITKAT)
public void onClick(View v) {
mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value=" + value);
}
});
}
public class JsInteration {
@JavascriptInterface
public String back() {
return "hello world";
}
}
}
test.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
function sum(a,b){
return a+b;
}
function s(){
var result =window.android.back();
document.getElementById("p").innerHTML=result;
}
</script>
</head>
<body>
<button onclick="s()">調用本地方法</button>
<a href="file:///android_asset/test2.html">點擊</a>
<p id="p"></p>
</body>
</html>
『貳』 android怎麼載入html
android載入html
主要有2種方案:
方案一:
啟動第三方瀏覽器或者安卓內置的瀏覽器進行載入先生html文件。
方案二:
使用android 自帶的webview控制項進行載入html文件或者網頁。
不常用方案有1種:
使用android控制項TextView進行載入html文件。
主要原理:
通過讀取html文件裡面的標簽進行解析相關的元素從而通過瀏覽器,或者android自帶的控制項進行顯示,其中webview控制項本質上就是一個瀏覽器,TextView顯示html內容就是通過解析標簽,元素通過內置方法轉化成相應帶有屬性的文本信息然後顯示到界面上。
詳細解決步奏:
方案一:
Uriuri=Uri.parse("http://www.XXXX.com");//要鏈接的地址或者html
Intentintent=newIntent(Intent.ACTION_VIEW,uri);
startActivity(intent);
缺點如果android中沒有瀏覽器,則無法啟動顯示相關內容。
方案二:
webview=(WebView)findViewById(R.id.WebView01);
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("http://www.xxxx.com");//要鏈接的地址或者html
缺點:目前沒有什麼缺點,比其他2種好,天生為載入html文件而出生的
方案三:
不常用的方法,藉助函數Html.fromHtml()來解析html內容,並且進行顯示。
TextViewtext1=(TextView)findViewById(R.id.TextView02);
text1.setText(Html.fromHtml(「<fontsize='20'>網頁內容html</font>」));
缺點:載入速度慢於webview載入速度。
最後
推薦使用webview進行載入html內容,其特性優於其他2種載入方式
『叄』 Android開發中對顯示HTML內容的幾種方式
首先,Android中顯示Html內容,有3中方式:(目前我用到的有這3種)
1、可以利用Android原生的Html.fromHtml(str, imageGetter, tagHandler)來進行顯示。(不過,我這邊用了,即使加了頁面載入動畫,還是覺得非常慢,有大量圖片,會導致OOM;如果圖片不多的話,可以考慮)
2、利用第三方插件HtmlTextView。
GitHub地址:https://github.com/PrivacyApps/html-textview
圖片載入很順暢,使用方法也非常簡單,不過,有兩個注意事項:
(1)其中,HtmlHttpImageGetter有3個構造函數,可以根據自己的情況選擇。
(2)載入大量圖片的時候,會導致OOM內存溢出。針對於這個情況,HtmlHttpImageGetter有一個壓縮圖片的方法可以調用,可以進去查看它的公共方法。(不過,我這邊顯示的圖片過大,每張1M左右,並且一下子有幾十張,即使設置了壓縮圖片,還是會導致OOM問題,目前還沒解決,有大神知道咋弄的,拜託指點一下,非常感謝!)
對了,這個第三方插件的基本用法,點擊上面的連接,進去一看就知道了,很簡單。
3、第三種,是我沒辦法的情況下想的:把html標簽里的內容利用正則表達式拿出來,其中,文本內容用一個TextView代替,<img>標簽圖片用一個ImageView代替,其他相關的標簽自行選擇替換。說白了,就是創建一個個的TextView以及ImageView填充到布局裡(LinearLayout之類的)。要說明的是:其中圖片顯示用Glide來實現。目前我這邊測試的情況還是可以的,載入的速度非常快,也沒因內存問題導致APP崩潰。
『肆』 android怎麼載入本地html文件
1。獲取資源的輸入流
資源文件 sample.txt 位於 $PROJECT_HOME/assets/ 目錄下,可以在 Activity 中通過
Context.getAssets().open(「test.html」)
方法獲取輸入流。
注意:如果資源文件是文本文件則需要考慮文件的編碼和換行符。建議使用UTF-8和Unix換行符。
2. WebView 載入assets目錄下的html文件
資源文件 sample.html 位於 $PROJECT_HOME/assets/ 目錄下,可以通過以下代碼
WebView.loadUrl(「file:///android_asset/test.html」);
載入html文件。
『伍』 怎麼在android手機上打開html文件
1. 在Android手機上打開HTML文件的方法是:
2. 使用瀏覽器:打開瀏覽器,然後點擊瀏覽器的「文件」按鈕,選擇要打開的HTML文件。
3. 使用文本編輯器:打開文本編輯器,然後點擊「文件」按鈕,選擇要打開的HTML文件。
4. 使用HTML閱讀器:下載一個HTML閱讀器,然後點擊「文件」按鈕,選擇要打開的HTML文件。