Android 与 js 交互
来源:互联网 发布:查开放房记录软件 编辑:程序博客网 时间:2024/05/28 03:03
Android原生调用js代码
1. 在activity_main中,定义一个webView,在MainActivity中WebView添加 js支持getSettings().setJavaScriptEnabled(true);
2.然后 .loadUrl(); 就可以加载布局了
assets下的代码:test.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Android与JS交互</title> <script type="text/javascript"> function test(str) { document.getElementById("content").innerHTML=str; } function callRes() { var imgSrcs = ""; var imgs = document.getElementsByTagName("img"); for(var i = 0; i < imgs.length; i++) { imgSrcs += imgs[i].src; if(i < imgs.length-1) { imgSrcs += "|"; } } window.android.callAndroid(imgSrcs); } function getIndex(index){ window.android.getIndex(index); } </script></head><body onload="callRes()"> <div> 这是一条神奇的天路 </div> <div id="content"> </div> <img onclick="getIndex(0)" src="http://pic.58pic.com/58pic/14/27/45/71r58PICmDM_1024.jpg" width="100%" /> <img onclick="getIndex(1)" src="http://pic17.nipic.com/20111122/6759425_152002413138_2.jpg" width="100%" /> <img onclick="getIndex(2)" src="http://pic10.nipic.com/20100929/4308872_150108084472_2.jpg" width="100%" /></body></html>
代码块:
HackyViewPager:import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.MotionEvent;public class HackyViewPager extends ViewPager { public HackyViewPager(Context context) { super(context); } public HackyViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { try { return super.onInterceptTouchEvent(ev); } catch (IllegalArgumentException e) { return false; } }}MainActivity:import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.webkit.JavascriptInterface;import android.webkit.WebView;import android.widget.Button;import java.util.ArrayList;public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private WebView mWebView; private Button mJs; private ArrayList<String> images; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView = (WebView) findViewById(R.id.web_view); mJs = (Button) findViewById(R.id.js_jiaohu); images=new ArrayList<>(); //添加js支持 mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl("file:///android_asset/test.html"); mWebView.addJavascriptInterface(this, "android"); mJs.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Android原生调用js代码 mWebView.loadUrl("javascript:test('liujie刘婕最棒')"); } }); } @JavascriptInterface public void callAndroid(final String text){ // 给Js提供接口,传过所有图片的url Log.i(TAG, "callAndroid: " + text); runOnUiThread(new Runnable() { @Override public void run() { // 图片用"|"隔开,遍历传过来的图片url集合,解析出其中的真实图片url if (!TextUtils.isEmpty(text)) { if (text.contains("|")) { String[] imgs = text.split("\\|"); if (imgs != null) { for (String img : imgs) { images.add(img); } } } } } }); } @JavascriptInterface public void getIndex(final int index) { // 给JS提供的接口,传过点击的图片的索引位置 Log.i(TAG, "getIndex: " + index); Intent intent = new Intent(MainActivity.this, PhotoActivity.class); intent.putStringArrayListExtra("imgs", images); intent.putExtra("index", index); startActivity(intent); }}PhotoActivity:
import android.content.Intent;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.view.ViewGroup;import com.bumptech.glide.Glide;import java.util.ArrayList;import uk.co.senab.photoview.PhotoView;import uk.co.senab.photoview.PhotoViewAttacher;public class PhotoActivity extends AppCompatActivity { private ArrayList<String> images; private int index = 0; private HackyViewPager mPhotoview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_photo); Intent intent = getIntent(); images = intent.getStringArrayListExtra("imgs"); if (null == images) { images = new ArrayList<>(); } index = intent.getIntExtra("index", 0); mPhotoview = (HackyViewPager) findViewById(R.id.photoview); mPhotoview.setAdapter(new PagerAdapter() { @Override public Object instantiateItem(ViewGroup container, int position) { PhotoView photoView = new PhotoView(container.getContext()); Glide.with(container.getContext()).load(images.get(position)).into(photoView); //点击事件 photoView.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() { @Override public void onPhotoTap(View view, float x, float y) { Log.i("--------------", "onPhotoTap: x =" + x +" y = " + y); } }); container.addView(photoView); return photoView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public int getCount() { return images.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } }); mPhotoview.setCurrentItem(index); } }activity_main中:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/js_jiaohu" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="调用js代码"/><WebView android:id="@+id/web_view" android:layout_width="match_parent" android:layout_height="wrap_content"></WebView></LinearLayout>
阅读全文
0 0
- android 与 js 交互
- Android与JS交互
- Android 与JS交互
- android与js交互
- android与JS交互
- android与js交互
- Android与js交互
- Android与JS交互
- Android与Js交互
- ANDROID 与JS交互
- Android与JS交互
- Android与js交互
- Android 与 js 交互
- Android与JS交互
- Android与js交互
- js与android交互
- Android与js交互
- Android 与 js 交互
- 工作记录
- 那些年,初学Android遇到的问题
- React Native入门——组件构成及生命周期简介
- 每次打开excel弹出要安装Microsoft.VisualStudio.QualityTools.LoadTestExcelAddIn.vsto的窗口
- apache的下载、配置以及端口转发的两种方式(server 2012)
- Android 与 js 交互
- Hive、Hbase、mysql区别
- 类型转换
- 本地通知和远程推送
- 谈谈客户端对于Token过期的处理
- 模块化的进进一步
- layoutAnimation动画
- JDK中hash冲突解决的两种方法
- list笔记