編輯:關於Android編程
最近項目中經常使用Html5而Android與JS調用經常會用到,這裡記錄一下,測試系統5.0以上。
這裡先貼一下源碼
Activity:
package jwzhangjie.com.webviewandjs; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.webkit.JavascriptInterface; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView)findViewById(R.id.webView); initWebView(); } private void initWebView(){ //設置編碼 webView.getSettings().setDefaultTextEncodingName(utf-8); //支持js webView.getSettings().setJavaScriptEnabled(true); //設置監聽事件 webView.setWebViewClient(new JieWewViewClient()); //設置本地調用對象及其接口 webView.addJavascriptInterface(new JavaScriptObject(getApplicationContext()), toAndroid); //載入js webView.loadUrl(file:///android_asset/index.html); } public void javaCallJsNoParams(View view){ webView.loadUrl(javascript:javaCallJsNoParamsMethod()); } public void javaCallJsHasParams(View view){ webView.loadUrl(javascript:javaCallJsHasParamsMethod(' + 123 + ')); } public class JavaScriptObject { Context mContxt; public JavaScriptObject(Context mContxt) { this.mContxt = mContxt; } @JavascriptInterface //sdk17版本以上加上注解 public void jsCallJavaNoParams() { Toast.makeText(mContxt, Js調用Java方法(無參), Toast.LENGTH_LONG).show(); } @JavascriptInterface //sdk17版本以上加上注解 public void jsCallJavaHasParams(String params) { Toast.makeText(mContxt, Js調用Java方法(有參): + params, Toast.LENGTH_SHORT).show(); } } class JieWewViewClient extends WebViewClient{ /** * 如果緊跟著 * webView.loadUrl(file:///android_asset/index.html); * 調用Js中的方法是不起作用的,必須頁面加載完成才可以 */ @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); webView.loadUrl(javascript:javaCallJsHasParamsMethod(' + 123 + ')); } } }
界面:
注意點:
1、Android系統17以及以上,js調用java需要在方法上面加入@JavascriptInterface
2、不能在加載html頁面的下面直接調用js方法,應該在WebViewClient的onPageFinished裡面加載,原則就是必須html加載完畢後,才能調用js中的方法。
Bitmap src = BitmapFactory.decodeResource(getResources(), imageId); //獲取Bitmap圖片Round
上一篇說到了通知欄Notification,提起通知欄,不得讓人想到Service以及BroadcastReceive,作為android的4大組建的2個重要成員,我們沒
1.概述之前實現過一個仿支付寶界面的代碼,可拖動網格視圖。其實實現的原理網上都可以找到,我也是參考網上實現的方法,實現了自己需要的界面。並對實現的原理和方法進行了分析,現
加速篇GRADLE的構建過程通常會比較漫長,一個中等項目,10M左右大小的app,一次完整構建大概在5分鐘左右,是不是很嚇人,當然,如果是在調試階段,采用Android