|
|
||
2.0になりました.
Androidアプリのように振る舞うモードを追加してます.
https://market.android.com/details?id=jp.fkmsoft.program.onjavascript
widgetオブジェクトのメソッドでButtonとかLinearLayoutとかを作って, fwindowオブジェクトのaddView(view)メソッドで画面に追加. OnClickイベントのみですがイベントハンドラも登録できたりします。
こんな感じ
function c(i) { alert('clicked'); } var button = widget.createButton(1, 'Click'); widget.setOnClick(button, 'c'); fwindow.addView(button);
AndroidのWebViewは, 面白いやつです.
JavaScriptを有効にしてあげると, ちゃんと動きます.
WebView web = new WebView(this); web.setWebChromeClient(new WebChromeClient()); web.getSettings().setJavaScriptEnabled(true); web.setVisibility(View.GONE); layout.addView(web); String html = "<html><head><script type='text/javascript'>" + "window.alert('moke');" + "</script></head><body></body></html>"; web.loadData(html, "text/html", "utf-8");
見えてなくても, 動きます.
Javaの世界にいるオブジェクトを, JavaScriptの世界に出張させることもできます.
たとえば, こんなクラスを定義してみる.
private static class JavaObj { public String call() { return "Moke on Java"; } }
このクラスのインスタンスをJavaScriptの世界に派遣させたい場合は, このメソッドを呼びましょう.
web.addJavascriptInterface(new JavaObj(), "moke");
第2引数はJavaScriptの世界でのお名前. さっそくJavaScriptの世界で仕事してもらいましょう.
WebView web = new WebView(this); web.setWebChromeClient(new WebChromeClient()); web.getSettings().setJavaScriptEnabled(true); web.setVisibility(View.GONE); layout.addView(web); web.addJavascriptInterface(new JavaObj(), "moke"); String html = "<html><head><script type='text/javascript'>" + "window.alert(moke.call());" + "</script></head><body></body></html>"; web.loadData(html, "text/html", "utf-8");
実行すると, こんな感じ. JavaScriptの世界に行ってしまっても, Javaの世界で定義されたpublicメソッド呼べます.
自前で簡単な設定画面を作りたいとき, SeekBarはそのままだとちょっと面倒.
なので, こんなクラスを作ってみた.
import java.lang.ref.WeakReference; import android.content.Context; import android.widget.SeekBar; import android.widget.TextView; public class LabelSeekBar extends SeekBar { private WeakReference<TextView> label; private String prefix; public LabelSeekBar(Context context, TextView label, String prefix) { super(context); this.label = new WeakReference<TextView>(label); this.prefix = prefix; setOnSeekBarChangeListener(new BarChangeListener(label, prefix)); } @Override public synchronized void setProgress(int progress) { super.setProgress(progress); if (label != null) { TextView text = label.get(); text.setText(prefix + progress); } } private static class BarChangeListener implements SeekBar.OnSeekBarChangeListener { private WeakReference<TextView> label; private String prefix; public BarChangeListener(TextView label, String prefix) { this.label = new WeakReference<TextView>(label); this.prefix = prefix; } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { label.get().setText(prefix + progress); } @Override public void onStartTrackingTouch(SeekBar seekBar) { /* nop*/ } @Override public void onStopTrackingTouch(SeekBar seekBar) { /* nop*/ } } }
文庫は気楽に読めていいよね
シロクマのことだけは考えるな!―人生が急にオモシロくなる心理術 (新潮文庫)
5回に1回ぐらい、ごほうび抜きというのが印象的