package com.novoda; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.webkit.WebView; import com.novoda.utils.PinchZoomDetector; public class HelloWebView extends Activity{ private static final int DIALOG_CHOOSE_VIEW_ID = 0; private WebView webView; private int fontSize; private PinchZoomDetector zoomDetector; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webview_main); webView = (WebView) findViewById(R.id.webview_main); webView.loadUrl("file:///android_asset/two_columns.html"); fontSize = webView.getSettings().getDefaultFontSize(); if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH)) { webView.setOnTouchListener(touchListener); zoomDetector = new PinchZoomDetector(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.webview_main_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { boolean result; switch (item.getItemId()) { case R.id.menu_action_zoom_in: fontSizePlus(); result = true; break; case R.id.menu_action_choose_view: showDialog(DIALOG_CHOOSE_VIEW_ID); result = true; break; case R.id.menu_action_zoom_out: fontSizeMinus(); result = true; break; default: result = super.onOptionsItemSelected(item); } return result; } private void fontSizePlus() { if (fontSize < 72) { webView.getSettings().setDefaultFontSize(++fontSize); } } private void fontSizeMinus() { int minimumFont = webView.getSettings().getMinimumFontSize(); if (fontSize > minimumFont) { webView.getSettings().setDefaultFontSize(--fontSize); } } @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch (id) { case DIALOG_CHOOSE_VIEW_ID: dialog = getChooseViewDialog(); break; default: dialog = super.onCreateDialog(id); } return dialog; } private Dialog getChooseViewDialog() { final String[] fileNames = {"Two columns", "Three columns", "Two columns and photo"}; final String[] filePaths = {"file:///android_asset/two_columns.html", "file:///android_asset/three_columns.html", "file:///android_asset/two_columns_and_photo.html"}; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Choose a View"); builder.setItems(fileNames, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { webView.loadUrl(filePaths[item]); } }); return builder.create(); } private OnTouchListener touchListener = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int result = zoomDetector.detectZoom(event); switch(result){ case PinchZoomDetector.ZOOMING_IN: fontSizePlus(); break; case PinchZoomDetector.ZOOMING_OUT: fontSizeMinus(); break; } return true; } }; }