H5与android原生的JS交互
16lz
2021-01-26
公司最近接手了一个电信的项目,其中最关键的技术就是H5页面与android的交互。因为之前项目中H5与原生界面的加载动画是分开写的,导致大小以及效果有差距,所以我才有接触两者之间交互的学习机会。简单的来说需求就是在H5中通过Js调用android自定义的LoadingDialog。
首先 Android通过内置的控件Webview来加载H5页面。主要可以设置的代码如下:
webView.setVerticalScrollBarEnabled(false);webView.setHorizontalScrollBarEnabled(false);webView.getSettings().setJavaScriptEnabled(true); //加上这句话才能使用JavaScript方法 webView.getSettings().setDomStorageEnabled(true);webView.requestFocus();webView.getSettings().setUseWideViewPort(true);webView.getSettings().setLoadWithOverviewMode(true);webView.getSettings().setSupportZoom(true);webView.getSettings().setBuiltInZoomControls(true);webView.getSettings().setSavePassword(false);webView.getSettings().setSaveFormData(false);webView.getSettings().setSupportZoom(false);
首先是JsInterface.java
public class JsInterface { Context context; public JsInterface(Context context) { this.context = context; } @JavascriptInterface public void startFunction() { new LoadingDialog(context,true,R.style.loadingDialog).show(); }
在activity里面实现H5里面的方法,注意方法之前要加上注解“ @JavascriptInterface ”,当 android:targetSdkVersion的数值小于17无所谓,当大于等于17时就必须添加,否则不会调用方法里面的Java代码。
在MainActivity中 通过 wv.addJavascriptInterface(new JsInterface(MainActivity.this),"shady") ; 前一个参数为定义的JsInterface,后一个为之后在H5界面中调用的名称。
public class MainActivity extends AppCompatActivity { private Button btn; private WebView wv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.btn); wv = (WebView) findViewById(R.id.wv); wv.getSettings().setJavaScriptEnabled(true);//开启Js支持 wv.loadUrl("file:///android_asset/test.html"); //New 一个接口类 后面的是名称 wv.addJavascriptInterface(new JsInterface(MainActivity.this),"shady"); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { wv.loadUrl("javascript:show(" + "'http://blog.csdn.net/Leejizhou'" + ")");//调用HTML5页 面中的JS方法 } }); }}
test页面
内容显示
aaaaa
CallAndroidMethod
更多相关文章
- h5页面引用idangerous.swiper.js 插件兼容ios和android出现的问
- Android(安卓)8.0 EditText 焦点无法移动到其他控件
- 在Eclipse下编译Android原生APK方法
- 实现静默安装和卸载应用
- Android中的对象序列化方法
- android view类分析
- Android监听手机电话状态与发送邮件通知来电号码的方法(基于Phon
- Android实现关机与重启的几种方式(推荐)
- android 自定义view之侧滑效果