WebViewに戻るボタンをつけてみた | Android系女史

Android系女史

Android開発など雑多なプログラムの愚痴でもしています。

アプリ -> WebにViewを移動したはいいけどこのままだと戻れない。
なのでWebViewにしたときに上部に戻るボタンが配置されるようにして
ボタンを押したらアプリに戻るようにしてみた。

WebView+ボタンの表示とアプリに戻る機能の実装は以下の流れ。

1. LinearLayoutクラスにWebViewとButtonを追加
2. ButtonにはOnClickListenerを追加する
3. OnClickListener()内でアプリのViewに戻すようにする
3. setContentViewにはWebViewではなくLinearLayoutを渡す

LinearLayoutを使用したボタンの配置は「表示するURLの指定」が参考になりました。

自分のプログラムの実装ではアプリのViewクラスとWeb用のViewのクラスを分けたかったので

class WebPage extends LinearLayout implements OnClickListener {

}
というクラスを作成。
この中でWebViewを扱ったり、Layoutしたり、ボタンのクリックイベントを取得したりしました。

メインクラスのonCreate()
// Web用のViewの初期化
webPage = new WebPage(this);
// 重要:レイアウトの前に一旦ContentViewに登録
setContentView(webPage);
webPage.createLayout();


WebPageクラス
// layout用定数
private final int FP = ViewGroup.LayoutParams.FILL_PARENT;
private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;

// コンストラクタ
public WebPage(Activity main) {
    super(main);
    // アプリのViewを保存しておく
    mainView = main;

    // WebViewの作成
    webView = new WebView(main);
    webView.setWebViewClient(new WebViewClient());

    // ボタンの作成
    btnRetApp = new Button(main);
    btnRetApp.setText("Return");
    btnRetApp.setOnClickListener(this);
}

// レイアウト作成関数
public void createLayout() {
    this.setOrientation(LinearLayout.VERTICAL);
    LinearLayout upper = new LinearLayout(mainView);
    upeer.setOrientation(LinearLayout.HORIZONTAL);

// レイアウトに追加
    upeer.addView(btnRetApp, new LinearLayout.LayoutParams(WC, WC));
    this.addView(upeer, new LinearLayout.LayoutParams(FP, WC));
    this.addView(webView, new LinearLayout.LayoutParams(WC, FP));
}

public void onClick(View v) {
    if (v == btnRetApp) {
        // アプリのViewに戻る
        mainView.moveMainView();
    }
}
はまったのがLinearLayoutクラスにaddViewする前に
setContentViewでLinearLayoutクラスのViewをセットしておかないといけないということでした。
これをしておかないと落ちました。