⑴ 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>
⑵ 安卓内嵌h5能够手势滑动功能,而ios不能实现为什么
总得一句话要重写onTouchEvent 1.手势滚动有很多方法: 可用viewpager实现view的左右滑屏,也可以用ViewFlipper,还有笨方法就是一个imageview,获取按下抬起坐标,判断左滑右滑,然后set另一张图片进去。 2.缩放也有很多做法 正统的做法是把imageview的属性scaleType设置为matrix(矩阵),然后获取滑动手势,来操作矩阵获得缩放的效果
⑶ Android 嵌入H5 为什么会出现翻页现象
H5里面有代码控制
⑷ h5怎么嵌套在android里
用webview显示就行了
⑸ 安卓内嵌h5能够手势滑动功能,而ios不能实现为什么
总得一句话要重写onTouchEvent1手势滚动有很多方法:可用viewpager实现view的左右滑屏,也可以用ViewFlipper,还有笨方法就是一个imageview,获取按下抬起坐标,判断左滑右滑,然后set另一张图片进去。2缩放也有很多做法正统的做法是把imagevi安卓内嵌h5能够手势滑动功能,而ios不能实现为什么
⑹ 有现成的h5页面 怎么嵌入到android
1:下载 2:解压缩 3:把解出来的和H5的图标一样的那个复制到H5文件夹(不复制应该也可以) 4:进游戏 5:打开修改器 6:Move_Points是无限制移动 Build_Points是无限制建筑 Show_me_money是无限金钱 I'm the superman是把等级调到最高级 这个是我用的修改器,娃娃 做的,现在貌似他又做了个6属性的。不过应该差不多。 其实自己慢慢摸索一下就知道了。 -完毕-
⑺ 原生app中嵌入h5页面。前端需要做什么工作吗或者前端需要跟Android或者ios人员沟通什么
下午的时候又发现双击还可以放大,上网上找了很多方法都没有什么卵用,坑爹啊最后没有办法我只能用vpn上google一下了,看了好多最后终于让我找到了
_webView.multipleTouchEnabled=NO
- (UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView {
returnnil;
}
这两个方法完美解决了双击放大的问题.
下面就是调用H5了其实很简单只要跟后端约定好接口调用下面方法即可
其他地方调用H5接口只需调用webView的方法可以解决大部分问题.
H5前端接口约定如下(例子)
functionsendCommand(cmd,param){
varurl="newle:"+cmd+":"+param;
document.location = url;
⑻ app内嵌的h5页面交互上 可以跳转打开app内的页面吗
可以的,具体我记不太清了,大致实现方法是
进入H5页面,js判断是ios还是android或是h5,
然后向ios和android索要起对应的方法,然后判断是否有这个方法,如果有就交还给app