WebView 的學習 + OptionMenu


WebViewを使用してWeb siteのページを表示することができます。
JavaScriptとAndroidの連携もできます。




先ず一つ簡単なアプリを紹介します。

このアプリの機能はGoogleのタップページを表示します。

以下は作る流れです。
1. Permissionの加入。Activityはネットを繋がられるため、AndroidManifest.xmlの中でandroid.permission.INTERNETを加入します。
2. WebViewの生成。
3. WebSettingsを取って設定してから、WebView.loadUrlを利用してWeb siteのPathを
  読み込みます。

さて、流れのプログラムを一つずつで紹介しましょう。

1. Permissionの加入。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.webviewexa"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.webviewexa.WebViewExa"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

2. WebViewの生成。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".WebViewExa" >

        <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>



3. WebSettingsを取って設定してから、WebView.loadUrlを利用してWeb siteのPathを
  読み込みます。

mwebView=(WebView) findViewById (R.id.webView);

// Get the WebView's settings
WebSettings settings=mwebView.getSettings();
// Set the JavaScript enable
settings.setJavaScriptEnabled(true);
// Set the Zoom function
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
// For default, if click a link it will open another page to
// connect the web site of the link. If want to use the same
// browser, don't want to open another, can use the setting
// on below.
mwebView.setWebViewClient(new WebViewClient());
mwebView.loadUrl("http://www.google.com");



【補充機能】OptionMenu
ナビを加えます。
ナビの内容はWeb siteの入力、引き返す、前進、再読み込み、閉じなど、
以上の五個機能を表示と作動することです。

Menuボタンを押して、画面の下でナビを現します。


以下は作成の流れです。
1. 新しい/res/menu/menu.xml ファイルを作成。
2. Web siteの入力を表示するLayoutを作成。
3. public boolean onCreateOptionsMenu(Menu menu)
  public boolean onPrepareOptionsMenu(Menu menu)
  public boolean onOptionsItemSelected(MenuItem item)
  三つのメソッドをオーバーライドします。

プログラムは以下です。
1. 新しい/res/menu/menu.xml ファイルを作成

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/gotourl"
        android:title="Goto" />
    <item android:id="@+id/exit"
        android:title="Exit" />
    <item android:id="@+id/goback"
        android:title="Back" />
    <item android:id="@+id/goforward"
        android:title="Forward" />
 
</menu>

2. Web siteの入力を表示するLayoutを作成。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".WebViewExa" >

    <RelativeLayout
        android:id="@+id/UrlEntry" 
        android:orientation="horizontal"
        android:visibility="gone"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:shrinkColumns="0" >

        <Button
            android:id="@+id/go"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="Go" />
        
        <EditText
            android:id="@+id/url"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@id/go"
            android:text="http://"
            android:ems="10" />

    </RelativeLayout>

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>



3. public boolean onCreateOptionsMenu(Menu menu)
  public boolean onPrepareOptionsMenu(Menu menu)
  public boolean onOptionsItemSelected(MenuItem item)
  三つのメソッドをオーバーライドします。


public class WebViewExa extends Activity {

private RelativeLayout urlEntry;
private Button btngo;
private EditText murl;
private WebView mwebView;

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view_exa);

urlEntry=(RelativeLayout) findViewById(R.id.UrlEntry);
btngo=(Button)findViewById(R.id.go);
murl=(EditText)findViewById(R.id.url);
mwebView=(WebView) findViewById (R.id.webView);

btngo.setOnClickListener(btngoOnClickListener);
// Get the WebView's settings
WebSettings settings=mwebView.getSettings();
// Set the JavaScript enable
settings.setJavaScriptEnabled(true);
// Set the Zoom function
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
// For default, if click a link it will open another page to
// connect the web site of the link. If want to use the same
// browser, don't want to open another, can use the setting
// on below.
mwebView.setWebViewClient(new WebViewClient());

mwebView.loadUrl("http://www.google.com");

}

private OnClickListener btngoOnClickListener = new OnClickListener(){

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
mwebView.loadUrl(murl.getText().toString());
urlEntry.setVisibility(View.GONE);
}

};

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}


@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
if(mwebView.canGoForward())
menu.findItem(R.id.goforward).setEnabled(true);
else
menu.findItem(R.id.goforward).setEnabled(false);

if(mwebView.canGoBack())
menu.findItem(R.id.goback).setEnabled(true);
else
menu.findItem(R.id.goback).setEnabled(false);

urlEntry.setVisibility(View.GONE);

return true;
}


@Override
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case(R.id.exit):
openExitDialog();
   break;
case(R.id.gotourl):
urlEntry.setVisibility(View.VISIBLE);
break;
case(R.id.goback):
mwebView.goBack();
break;
case(R.id.goforward):
mwebView.goForward();
break;
default:
break;
}
return true;
}

private void openExitDialog(){
new AlertDialog.Builder(this)
.setTitle("EXIT")
.setMessage("Exit the browser? ")
.setPositiveButton("YES", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
finish();
}
})
.setNegativeButton("NO",new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub

}
})
.show();
}

}

参考資料:
http://androidbiancheng.blogspot.jp/2010/01/webview.html
http://androidbiancheng.blogspot.jp/2010/01/webview_11.html

留言