04. キーワードを入れてWeb表示

これまでの内容では、Yahooから他のサイトに移ることができませんので、URLを指定できるようにしようかな~と思ったのですが、

"http://www.yahoo.co.jp"

を入力するのって面倒なので、入れた文字を直接Googleに投げるやり方を説明したいと思います。

よってここでは、以下の機能を実装してみたいと思います。

  1. 文字列の入力フォームを加える方法
  2. 入力した文字列を取り込む方法
  3. 文字列から、Google検索へ直接移行できるようにすること
capture

文字列の入力フォームを加える

この入力フォームは、03番に示したレイアウトファイルの下の方、EditTextにあたります。

        <EditText
            android:id="@+id/addressbar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:lines="1"
            android:hint="検索キーワード" />

また、入力した文字を拾うために、OKボタンを作り、このボタンを押したら検索処理をする、という流れにしたいと思います。

        <Button
            android:id="@+id/ok_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="実行" />

これらは、画面の下に「横に並んでほしい」ので、LinearLayoutを横方向指定で使いましょう。

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        
        <EditText
            android:id="@+id/addressbar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:lines="1"
            android:hint="検索キーワード" />
        
        <Button
            android:id="@+id/ok_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="実行" />
            
    </LinearLayout>

このレイアウトファイルは、すでに03番で組込済みと思います。次はコード側とレイアウトファイルを連携させます。

コード側とレイアウトファイルの連携

public class MainActivity extends Activity {

WebView webview;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.linearlayout);

webview = (WebView) findViewById(R.id.webview); /// webviewとレイアウトファイルのwebviewをリンクする

webview.loadUrl("http://www.yahoo.co.jp"); /// YahooのURLを直指定

webview.getSettings().setJavaScriptEnabled(true); /// JavaScriptを有効

webview.getSettings().setBuiltInZoomControls(true); /// タッチ操作による拡大縮小機能を有効

webview.setWebViewClient(new WebViewClient(){ /// この5行で、web画面を開くときに自分自身で開くようにします

public boolean shouldOverrideUrlLoading(WebView wv, String url){

return false;

}

});

Button ok_button = (Button) findViewById(R.id.ok_button);

ok_button.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View v) {

// TODO 自動生成されたメソッド・スタブ

EditText addressbar = (EditText) findViewById(R.id.addressbar);

String search_text = "https://www.google.co.jp/#q=" + addressbar.getText().toString();

webview.loadUrl(search_text);

}

});

}

}

この真っ黒焦げなところは、「リスナー」と呼ばれる定義になっていて、ボタンをクリックされたときに処理する内容を記述する構文になります。

なんちゃらリスナー、というのはAndroidのいろいろなところで出てきますので、覚えておいてください。

ここでは、ボタンを押されると onClick というメソッドが呼ばれるので、

  1. EditTextをレイアウトファイルのものとリンクする(addressbar)
  2. addressbarから、入力文字列を取り出し(.getText())、それをString形式に変換(.toString())します。その文字列の頭に、Googleに検索文字列を渡す文字列をくっつけます。
  3. webviewのloadUrlに、2で作成した文字列を渡します。

こうすると、addressbarから検索キーワードを入れてGoogle検索し、見たいページをwebviewで見られるので、ちょっとしたウェブアクセスには使えるレベルになりました。