Android 手機瀏覽器的開發

來源:互聯網
上載者:User

最近看android資料,隨手寫了個簡單手機瀏覽器應用,該應用很簡單,主要包括AutoCompleteTextView 、WebView、Button控制項,但是涉及到了很多android開發常識,例如:許可權管理、布局標題列狀態列隱藏、開闢線程監聽事件、子線程不能更新主線程UI等,下面介紹一下程式碼範例:

1,修改AndroidManifest.xml檔案,首先添加上網和應用旋轉許可權, 如下:

    <uses-permission android:name="android.permission.INTERNET"/>    <uses-permission android:name="android.permission.SET_ORIENTATION"/>

在此也可以添加如下代碼使應用全屏,即隱藏狀態列和標題列

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

2, xml布局代碼如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <AutoCompleteTextView        android:id="@+id/url"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="@string/url"        android:inputType="textUri"         android:completionHint="@string/url"        android:completionThreshold="1" />    <WebView        android:id="@+id/show"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_above="@+id/btnLayout"        android:layout_below="@+id/url" />    <LinearLayout        android:id="@+id/btnLayout"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:orientation="horizontal" >        <Button            android:id="@+id/back"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1.0"            android:text="@string/back" />        <Button            android:id="@+id/forward"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1.0"            android:text="@string/forward" />        <Button            android:id="@+id/refresh"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1.0"            android:text="@string/refresh" />        <Button            android:id="@+id/home"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1.0"            android:text="@string/home" />    </LinearLayout></RelativeLayout>

布局設計中要注意實現適應螢幕。

3, java代碼

package com.example.webbrowser;import java.util.Timer;import java.util.TimerTask;import java.util.regex.Matcher;import java.util.regex.Pattern;import android.app.Activity;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.KeyEvent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.ArrayAdapter;import android.widget.AutoCompleteTextView;import android.widget.Button;import android.widget.Toast;public class WebBrowser extends Activity {AutoCompleteTextView url;WebView show;String[] booksArray = new String[]{"http://maps.google.com","http://maps.baidu.com","http://qq.com","www.baidu.com","www.163.com"};    @Override    public void onCreate(Bundle savedInstanceState)     {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_web_browser);                final Activity activity = this;                        show = (WebView)findViewById(R.id.show);        show.getSettings().setJavaScriptEnabled(true);        show.getSettings().setBuiltInZoomControls(true);        //show.getSettings().setDisplayZoomControls(false);        show.setWebViewClient(new WebViewClient()        {        public boolean shouldOverrideUrlLoading(WebView view, String strUrl)        {        view.loadUrl(strUrl);        url.setText(strUrl);        return false;        }                public void onPageStarted(WebView view, String strUrl, Bitmap favicon)        {                super.onPageStarted(view, strUrl, favicon);        url.setText(strUrl);        }                public void onPageFinished(WebView view, String strUrl)        {        }                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)         {             Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();        }        });                                url = (AutoCompleteTextView)findViewById(R.id.url);        ArrayAdapter<String> aa = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, booksArray);        url.setAdapter(aa);        url.setOnKeyListener(new View.OnKeyListener()         {public boolean onKey(View v, int keyCode, KeyEvent ev) {if (keyCode == KeyEvent.KEYCODE_ENTER){        String strUrl = url.getText().toString();        Pattern p = Pattern.compile("http://([\\w-]+\\.)+[\\w-]+(/[\\w-\\./?%=]*)?");Matcher m = p.matcher(strUrl);if (!m.find()){strUrl = "http://" + strUrl;}    show.loadUrl(strUrl);    return true;}return false;}});                // button         final Button backBtn = (Button)findViewById(R.id.back);        final Button forwardBtn = (Button)findViewById(R.id.forward);        Button refreshBtn = (Button)findViewById(R.id.refresh);        Button homeBtn = (Button)findViewById(R.id.home);        backBtn.setEnabled(false);        forwardBtn.setEnabled(false);                backBtn.setOnClickListener(new OnClickListener()        {        public void onClick(View v)        {        show.goBack();        }        });                forwardBtn.setOnClickListener(new OnClickListener()        {        public void onClick(View v)        {        // TODO        show.goForward();        }        });                refreshBtn.setOnClickListener(new OnClickListener()        {        public void onClick(View v)        {        // TODO        String strUrl = url.getText().toString();    show.loadUrl(strUrl);        }        });                homeBtn.setOnClickListener(new OnClickListener()        {        public void onClick(View v)        {        // TODO    show.loadUrl("http://maps.google.com");        }        });                final Handler handler = new Handler()        {        @Override        public void handleMessage(Message msg)        {        if (msg.what == 0x1111)        {        // whether can go back              if (show.canGoBack())            {            backBtn.setEnabled(true);            }            else            {            backBtn.setEnabled(false);            }                        // whether can go forward            if (show.canGoForward())            {            forwardBtn.setEnabled(true);            }            else            {            forwardBtn.setEnabled(false);            }        }                super.handleMessage(msg);        }        };                // create thread to change button states         new Timer().schedule(new TimerTask()        {        public void run()        {        Message msg = new Message();        msg.what = 0x1111;        handler.sendMessage(msg);        }        }, 0, 100);    }        @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        // Check if the key event was the Back button and if there's history        if ((keyCode == KeyEvent.KEYCODE_BACK) && show.canGoBack())        {            show.goBack();            return true;        }        // If it wasn't the Back key or there's no web page history, bubble up to the default        // system behavior (probably exit the activity)        return super.onKeyDown(keyCode, event);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.activity_web_browser, menu);        return true;    }}

除了AutoCompleteTextView輸入URL和WebView顯示網頁內容外,應用底部有四個Button分別實現後退、前進、重新整理、首頁(暫未實現)等功能,到此就可以在android手機上使用自己的瀏覽器了。

4,應用:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.