JavaからJavascriptを実行
HTMLで設定したJavascriptをAndroidから実行します。
これによりJavascriptのメソッドを実行することで
HTMLに値などを設定できます。
package test.example.com.test34;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
//Buttonの宣言
import android.view.View;
import android.widget.Button;
//クリックイベント用に追加
import android.view.View.OnClickListener;
//ログ出力の宣言
import android.util.Log;
import android.widget.RelativeLayout;
import android.webkit.WebView;
public class MainActivity extends AppCompatActivity implements OnClickListener {
//setId用の管理番号
private int mNo1;//ボタン(画像表示用)
private int mNo2;//WebView
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout layout = new RelativeLayout(this);
setContentView(layout);
//座標の初期設定
int x=0;
int y=0;
int width=0;
int height=0;
x=50;
y=50;
width=200;
height=60;
Button btn1=new Button(this);
mNo1 = View.generateViewId();
btn1.setId(mNo1);
//配置を設定
RelativeLayout.LayoutParams obj1 = getLayoutObject(width, height);
obj1.leftMargin=x;
obj1.topMargin=y;
btn1.setText("値を設定");
btn1.setOnClickListener(this);
layout.addView(btn1, obj1);
x=0;
y=150;
width=430;
height=400;
obj1 = getLayoutObject(width, height);
obj1.leftMargin=x;
obj1.topMargin=y;
WebView web = new WebView(this);
mNo2 = View.generateViewId();
web.setId(mNo2);
//Javascriptの有効有無
//true:有効
//false:無効
web.getSettings().setJavaScriptEnabled(true);
//拡大鏡の表示有無(+と-コントロールによる拡縮)
web.getSettings().setBuiltInZoomControls(true);
//WebViewをレイアウトに追加します
layout.addView(web,obj1);
web.loadData(getHTML(), "text/html", "utf-8");
}
private String getHTML()
{
StringBuilder sHTML = new StringBuilder();
sHTML.append("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN'>");
sHTML.append("<html>");
sHTML.append("<head>");
sHTML.append("<meta http-equiv='Content-Type'");
sHTML.append(" content='text/html; charset=UTF-8'>");
sHTML.append("<script type='text/javascript' language='javascript' >");
sHTML.append("function test1()");
sHTML.append("{ ");
sHTML.append(" document.getElementById(\"txt1\").value = \"\";");
sHTML.append("}");
sHTML.append("function test2()");
sHTML.append("{ ");
sHTML.append(" document.getElementById(\"txt1\").value = \"1234567890\";");
sHTML.append("}");
sHTML.append("</script>");
sHTML.append("</head>");
sHTML.append("<body>");
sHTML.append("<form id=frm1 name=frm1>");
//ちょっと下に下げた(微調整)
for(int i=0;i<5;i++)
{
sHTML.append("<br />");
}
sHTML.append("<input type=text id=txt1 name=txt1 value=\"\" />");
sHTML.append("<input type=button id=btn1 name=btn1 value=\"Clear\"");
sHTML.append(" onClick=\"test1()\"/>");
for(int i=0; i < 20; i++)
{
sHTML.append("<br />");
}
sHTML.append("</form>");
sHTML.append("</body>");
sHTML.append("</html>");
return sHTML.toString();
}
@Override
//ボタンがクリックされたら実行されます。
public void onClick(View view) {
Log.d("onClick mNo2",String.valueOf(mNo2));
WebView web = (WebView)findViewById(mNo2);
Log.d("loadUrl","start -------------------");
web.loadUrl("javascript:test2()");
Log.d("loadUrl","end ---------------------");
}
//レイアウトを決定するオブジェクトを生成し渡します
public RelativeLayout.LayoutParams getLayoutObject(int width,int height)
{
return new RelativeLayout.LayoutParams(width, height);
}
}
|
このサンプルではHTML内で定義したJavascriptの「test2」メソッドを実行しようとしています。
画面上のボタンをタップしたタイミングで「loadUrl」メソッドのJavascriptの「test2」メソッドを呼び出しています。
これによりHTMLで定義したtest2メソッドが実行されるためHTML上のテキストに
「1234567890」が設定されます。
実行結果
|
|