Android 手机浏览器的开发

news/2024/11/8 18:50:13/

最近看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" ><AutoCompleteTextViewandroid: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" /><WebViewandroid:id="@+id/show"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@+id/btnLayout"android:layout_below="@+id/url" /><LinearLayoutandroid: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" ><Buttonandroid:id="@+id/back"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1.0"android:text="@string/back" /><Buttonandroid:id="@+id/forward"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1.0"android:text="@string/forward" /><Buttonandroid:id="@+id/refresh"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1.0"android:text="@string/refresh" /><Buttonandroid: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"};@Overridepublic 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){// TODOshow.goForward();}});refreshBtn.setOnClickListener(new OnClickListener(){public void onClick(View v){// TODOString strUrl = url.getText().toString();show.loadUrl(strUrl);}});homeBtn.setOnClickListener(new OnClickListener(){public void onClick(View v){// TODOshow.loadUrl("http://maps.google.com");}});final Handler handler = new Handler(){@Overridepublic 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 forwardif (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);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// Check if the key event was the Back button and if there's historyif ((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);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_web_browser, menu);return true;}
}


除了AutoCompleteTextView输入URL和WebView显示网页内容外,应用底部有四个Button分别实现后退、前进、刷新、主页(暂未实现)等功能,到此就可以在android手机上使用自己的浏览器了。

4,应用截图:


http://www.ppmy.cn/news/662189.html

相关文章

鸿蒙系统浏览器内核,四大浏览器横评出炉:Chromium 内核版 Edge 四项夺冠,优于原生 Chrome...

四大浏览器横评出炉&#xff1a;Chromium 内核版 Edge 四项夺冠&#xff0c;优于原生 Chrome 2020-01-16 14:04:30 51点赞 382收藏 243评论 如此前所预告的一样&#xff0c;微软于美国时间 1 月 15 日正式推出 Chromium 内核的全新 Microsoft Edge 浏览器&#xff0c;外媒 Vent…

Google浏览器最新-开发版、企业版、普通版 官网下载 正在使用。。。

最近重新安装了一下电脑系统&#xff0c;准备下载Google浏览器&#xff0c;但是个人有个毛病&#xff0c;习惯在官网下载&#xff0c;但是google官网上不去&#xff0c;自己就想办法到google官网下载到了最新的浏览器&#xff0c;放到这里&#xff0c;以供备份&#xff0c;以后…

Edge浏览器调试移动端设备插件

Edge浏览器调试移动端设备插件 插件获取地址 插件地址链接&#xff1a;https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home?hlzh-CN。 在该页面中搜索&#xff1a;Allow CORS: Access-Control-Allow-Origin。 插件使用 1、edge浏览器中下载插件&…

目前主流浏览器市场及浏览器内核介绍

主流浏览器 以下的数据来源于国际知名的统计网站statcounter&#xff0c;数据的统计时间为2021年08月 – 2022年08月 主流电脑浏览器 全球 国内 主流手机浏览器 全球 国内 由此数据可看到&#xff0c;谷歌浏览器的市场份额占比遥遥领先 浏览器内核 1. Trident IE的内…

chrome edge浏览器支持chatGPT3.5/chatGPT4.0

推荐一款很好用的浏览器插件&#xff0c;大家可以下载登录免费使用 https://gochitchat.ai/invited?c03d8c0066a2d2b2388e8997b94750918

Android chrome浏览器的定制

最近在做海外项目需要定制chrome浏览器的书签和主页&#xff0c;在8.1的项目上实现&#xff0c;当时手机还没有预制GMS&#xff0c;只能下载chrome 这个apk做实验&#xff0c;出现了很多问题&#xff0c;书签没有作用&#xff0c;安装了gms里面的chrome&#xff0c;主页又没生效…

外贸人必备GoogleChrome浏览器插件推荐(一)

图片来源&#xff1a;图虫创意 谷歌旗下牛逼的产品很多&#xff0c;Google Chrome浏览器是其中一个&#xff0c;这个浏览器是目前的CEO劈柴哥带队开发的&#xff0c;这是Pichai兄加入谷歌后开发的第一款产品。 从这款产品我们就能看出为什么Pichi能够当上谷歌的CEO。 谷歌浏…

谷歌浏览器 android4.4,谷歌发布移动版Chrome浏览器仅限Android4.0

谷歌已经针对Android手机推出了移动版Chrome浏览器 演示视频截图 谷歌已经针对Android手机推出了移动版Chrome浏览器Chrome for Android Beta&#xff0c;不过目前还只限于Android 4.0系统。 移动版Chrome运行速度更快&#xff0c;可以同步任何内容&#xff0c;标签之间的转换更…