开发android的浏览器很简单吧,不过这浏览器倒是很简易。下面每一处代码都备注上注解了!废话不多说,下面直接上代码!

运行后界面

 

主界面的代码

activity_main.xml布局

<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=".MainActivity" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="140dp" >
<ImageView
android:id="@+id/imageBanner"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@drawable/ic_launcher" />
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp">

<Button
android:id="@+id/btn_so"
android:layout_width="55dp"
android:layout_height="50dp"
android:background="@drawable/sou"/>

<EditText
android:id="@+id/ed_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="请输入网址">

<requestFocus />
</EditText>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp" >

<ImageButton
android:id="@+id/img_baidu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/bd" />

<ImageButton
android:id="@+id/img_huohu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/sh" />

<ImageButton
android:id="@+id/img_qq"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/qq" />

<ImageButton
android:id="@+id/img_slo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/slo" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp">

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="15dp"
android:orientation="vertical" >

<TextView
android:id="@+id/text_news"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="新闻"
android:textSize="20dp" />

<TextView
android:id="@+id/text_jingdong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="京东" />

</LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical" >

<TextView
android:id="@+id/text_jiaju"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="家居"
android:textSize="20dp" />

<TextView
android:id="@+id/text_junshi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="军事" />

</LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical" >

<TextView
android:id="@+id/text_music"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="音乐" />

<TextView
android:id="@+id/text_sport"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="运动" />

</LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical" >

<TextView
android:id="@+id/text_dianying"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="电影" />

<TextView
android:id="@+id/text_live"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="生活" />

</LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical" >

<TextView
android:id="@+id/text_more1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="更多》" />

<TextView
android:id="@+id/text_more2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="更多》" />

</LinearLayout>

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal" >

<ImageView
android:id="@+id/img_img"
android:layout_width="91dp"
android:layout_height="wrap_content"
android:layout_weight="0.77"
android:src="@drawable/shenghuo" />
</LinearLayout>

</LinearLayout>

主MainActivity.java

public class MainActivity extends Activity implements OnClickListener {
//定义TextView
private TextView text_news,text_music;
//定义图片按钮
private ImageButton img_baidu,img_huohu,img_qq,img_sh;
//定义搜索按钮
private Button btn_sou=null;
//定义输入框
private EditText ed_text=null;
//定义一个图片
private ImageView img,img_img;
//定义一个图片数组
private int[] images=new int[]{
R.drawable.a,
R.drawable.b,
R.drawable.bb,
R.drawable.c,
R.drawable.ff,

};
//创建Handler对象 用于接收消息
private Handler handler=new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case 1:
Bundle b=msg.getData(); //获取接收到的数据
int i=b.getInt("index"); //获取index
img.setImageResource(images[i]);//设置图片来源
break;

}
}
};
//创建定时器线程
private Timer timer=new Timer();
private TimerTask timeTask=new TimerTask(){
public void run(){
Random t=new Random(); //创建一个随机函数
int index=t.nextInt(5); //产生5以内的一个随机数
Bundle bundle=new Bundle(); //创建一个bundle对象,作用是捆绑数据
bundle.putInt("index", index); //将index放入bundle对象把随机数放消息里面
Message msg=new Message();
msg.what=1;
msg.setData(bundle); //将bundle作为书记放入消息
handler.sendMessage(msg); //将消息发送出去

}

};

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到图片的组件,textView控件
img=(ImageView)findViewById(R.id.imageBanner);
img_img=(ImageView)findViewById(R.id.img_img);
text_news=(TextView)findViewById(R.id.text_news);
text_music=(TextView)findViewById(R.id.text_music);

//找到各浏览器图标组件
img_baidu=(ImageButton)findViewById(R.id.img_baidu);
img_huohu=(ImageButton)findViewById(R.id.img_huohu);
img_qq=(ImageButton)findViewById(R.id.img_qq);
img_sh=(ImageButton)findViewById(R.id.img_slo);
//搜索按钮,输入框组件
btn_sou=(Button)findViewById(R.id.btn_so);
ed_text=(EditText)findViewById(R.id.ed_txt);
ed_text.requestFocus();
ed_text.setSelectAllOnFocus(true);
//设置点击监听事件
btn_sou.setOnClickListener(this);
img_baidu.setOnClickListener(this);
img_huohu.setOnClickListener(this);
img_qq.setOnClickListener(this);
img_sh.setOnClickListener(this);
text_news.setOnClickListener(this);
text_music.setOnClickListener(this);
img_img.setOnClickListener(this);
//调用timeTask
timer.schedule(timeTask, 0,3000);
}

public void onClick(View v) {
switch(v.getId()){
case R.id.btn_so:
//创建Intent 用于开启新的Activity
Intent intent=new Intent(MainActivity.this,SendActivity.class);
//获取输入框的网址
String uri=ed_text.getText().toString();
//判断输入框输入的网址 toLowerCase把输入字符串中的大写字母全部变成小写字符。
//判断是否输入字符串,则提示消息
if("".equals(ed_text.getText().toString())){
Toast.makeText(MainActivity.this, "输入框不能为空", 0).show();
}
if(uri.length()>0)
{
if(!(uri.toLowerCase().startsWith("http://"))||(uri.toLowerCase().startsWith("http://")))
{
uri="http://"+uri;
}
//封装输入的网址
intent.putExtra("uri",uri);

//开启新的Activity
startActivity(intent);
}

break;

case R.id.img_baidu:
//创建Intent 用于开启新的Activity
Intent inten=new Intent(MainActivity.this,SendActivity.class);
//定义一个String 用于放置网址
String urq="http://www.baidu.com";
//封装网址
inten.putExtra("uri",urq);
//开启新的Activity SendActivity
startActivity(inten);
break;

//同上
case R.id.img_slo:
Intent slo=new Intent(MainActivity.this,SendActivity.class);
String sl="http://www.so.com/s?q=";
slo.putExtra("uri",sl);
startActivity(slo);
break;
case R.id.img_qq:
Intent sqq=new Intent(MainActivity.this,SendActivity.class);
String ql="http://www.qq.com";
sqq.putExtra("uri",ql);
startActivity(sqq);
break;
case R.id.img_huohu:
Intent shh=new Intent(MainActivity.this,SendActivity.class);
String hh="http://www.soso.com/q?w=";
shh.putExtra("uri",hh);
startActivity(shh);
break;
case R.id.text_news:
Intent news=new Intent(MainActivity.this,SendActivity.class);
String xinwen="http://xw.qq.com/m/news";
news.putExtra("uri",xinwen);
startActivity(news);
break;
case R.id.text_music:
Intent musics=new Intent(MainActivity.this,SendActivity.class);
String music="https://y.qq.com/";
musics.putExtra("uri",music);
startActivity(musics);
break;
case R.id.img_img:
Intent live=new Intent(MainActivity.this,SendActivity.class);
String shuo="https://www.jd.com/";
live.putExtra("uri",shuo);
startActivity(live);
break;

default:
break;
}
}
}

跳转的界面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<Button
android:id="@+id/btn_back"
android:layout_width="45dp"
android:layout_height="43dp"
android:background="@drawable/fanhi" />

<EditText
android:id="@+id/ed_t"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1.10"
android:ems="10"
android:singleLine="true" >

<requestFocus />
</EditText>

<Button
android:id="@+id/btn_sou"
android:layout_width="45dp"
android:layout_height="43dp"
android:background="@drawable/sou" />
</LinearLayout>

<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="5dp"
android:visibility="invisible" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="380dp" >

<WebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="397dp" />
</LinearLayout>

<RelativeLayout
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="22dp"
android:background="#F3F3Fa" >

<Button
android:id="@+id/btn_mian"
android:layout_width="43dp"
android:layout_height="43dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginRight="22dp"
android:background="@drawable/mian" />

<Button
android:id="@+id/btn_backq"
android:layout_width="43dp"
android:layout_height="43dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="24dp"
android:background="@drawable/back" />

<Button
android:id="@+id/btn_shuaxin"
android:layout_width="45dp"
android:layout_height="43dp"
android:layout_alignParentTop="true"
android:layout_marginRight="18dp"
android:layout_toLeftOf="@+id/btn_mian"
android:background="@drawable/shuanxin" />

<Button
android:id="@+id/btn_qj"
android:layout_width="43dp"
android:layout_height="43dp"
android:layout_alignParentTop="true"
android:layout_marginLeft="14dp"
android:layout_toRightOf="@+id/btn_backq"
android:background="@drawable/qianjin" />

<Button
android:id="@+id/btn_jia"
android:layout_width="45dp"
android:layout_height="43dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:background="@drawable/jia" />

</RelativeLayout>

</LinearLayout>

跳转的SendActivity

public class SendActivity extends Activity implements OnClickListener {
//定义后退,前进,刷新,主页Button
private Button btn_backq,btn_qianjin,btn_shuanxin,btn_mian;
//定义一个EditText
private EditText ed_t;
//定义搜索按钮和返回按钮
private Button btn_back,btn_sou;
//定义WebView对象
private WebView webview;
//定义一个进度条对象
private ProgressBar bar;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view);
//找到WebView的控件
webview=(WebView)findViewById(R.id.webView1);

//获取Intent传过来的数据,webView加载数据
Intent intent=getIntent();
String url=intent.getStringExtra("uri");
webview.loadUrl(url);

//获取Intent传过来的数据,webView加载数据
Intent in=getIntent();
String urq=in.getStringExtra("urq");
webview.loadUrl(urq);

//获取Intent传过来的数据,webView加载数据
Intent slo=getIntent();
String ue=slo.getStringExtra("sl");
webview.loadUrl(ue);

//获取Intent传过来的数据,webView加载数据
Intent qq=getIntent();
String iqq=qq.getStringExtra("ql");
webview.loadUrl(iqq);

//获取Intent传过来的数据,webView加载数据
Intent hu=getIntent();
String ihu=hu.getStringExtra("hh");
webview.loadUrl(ihu);

//获取Intent传过来的数据,webView加载数据
Intent news=getIntent();
String newss=news.getStringExtra("xinwen");
webview.loadUrl(newss);

//获取Intent传过来的数据,webView加载数据
Intent music=getIntent();
String musics=music.getStringExtra("music");
webview.loadUrl(musics);

//获取Intent传过来的数据,webView加载数据
Intent live=getIntent();
String lives=live.getStringExtra("shuo");
webview.loadUrl(lives);

//找到输入框,返回按钮,搜索按钮,后退,前进,刷新等控件
ed_t=(EditText)findViewById(R.id.ed_t);
btn_back=(Button)findViewById(R.id.btn_back);
btn_sou=(Button)findViewById(R.id.btn_sou);
btn_backq=(Button)findViewById(R.id.btn_backq);
btn_qianjin=(Button)findViewById(R.id.btn_qj);
btn_shuanxin=(Button)findViewById(R.id.btn_shuaxin);
btn_mian=(Button)findViewById(R.id.btn_mian);
bar=(ProgressBar)findViewById(R.id.progressBar1);
//设置点击事件
btn_back.setOnClickListener(this);
btn_sou.setOnClickListener(this);
btn_backq.setOnClickListener(this);
btn_qianjin.setOnClickListener(this);
btn_shuanxin.setOnClickListener(this);
btn_mian.setOnClickListener(this);

//设置webview监听事件
webview.getSettings().setJavaScriptEnabled(true);//开启javascript支持
webview.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl(url);//加载网址
ed_t.setText(url);
//true 是设置在webView中打开网页
return true;
}

public void onPageFinished(WebView view, String url) {
bar.setVisibility(View.INVISIBLE);//设置进度条隐藏
super.onPageFinished(view, url);
}

public void onPageStarted(WebView view, String url, Bitmap favicon) {
bar.setVisibility(View.VISIBLE);//设置进度条隐藏
super.onPageStarted(view, url, favicon);
}

});

//进度条的处理
webview.setWebChromeClient(new WebChromeClient(){
public void onProgressChanged(WebView view, int newProgress){
bar.setProgress(newProgress);
super.onProgressChanged(view, newProgress);
}
//更改网址的标题
public void onReceivedTitle(WebView view, String title) {
SendActivity.this.setTitle(title);

super.onReceivedTitle(view, title);
}

});

}

@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btn_sou:
String url=ed_t.getText().toString().trim();
//tolower转换成小写,不以http开头,判断也没有输入前缀的http
//判断是否输入字符串则提示消息
if("".equals(ed_t.getText().toString())){
Toast.makeText(SendActivity.this, "输入框不能为空", 0).show();
}
if(url.length()>0){
if(!(url.toLowerCase().startsWith("http://"))||(url.toLowerCase().startsWith("http://"))){
url="http://"+url;
}
ed_t.clearFocus();//失去焦点
webview.requestFocus();//webview获得焦点
webview.stopLoading();//让webview停止加载
webview.loadUrl(url);//加载url路径
}
break;
//后退按钮
case R.id.btn_backq:
if(webview.canGoBack()){
webview.goBack();
}
break;
//前进
case R.id.btn_qj:
if(webview.canGoForward()){
webview.goForward();
}
break;
//刷新
case R.id.btn_shuaxin:
webview.reload();
break;
//返回首页
case R.id.btn_mian:
SendActivity.this.finish();
break;
case R.id.btn_back:
//返回按钮
//关闭当前
SendActivity.this.finish();
break;

default:
break;
}
}
//按钮的点击事件

public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
if(webview.canGoBack()){
webview.goBack();
return true;
}else{
System.exit(0);//表示正常退出
}
}
return super.onKeyDown(keyCode, event);
}

}

最后不要忘记在AndroidManifest.xml给浏览器加上上网的权限

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

好咯,这样简易的浏览器就做好了!具备基本的上网,以后还会添加更多功能!

一个简易的android浏览器。求指教!的更多相关文章

  1. Jsoup抓取网页数据完成一个简易的Android新闻APP

    前言:作为一个篮球迷,每天必刷NBA新闻.用了那么多新闻APP,就想自己能不能也做个简易的新闻APP.于是便使用Jsoup抓取了虎扑NBA新闻的数据,完成了一个简易的新闻APP.虽然没什么技术含量,但 ...

  2. android开发学习---开发一个简易的短信发送器

    一.需求: 开发一个简易的短信发送器,输入:对方手机号码,短信内容,点击发送按钮,短信发送成功,对方手机成功收到短信. 其中要求短信内容过长时可以自动拆分,长度英文是160个英文,中文是70个,中英混 ...

  3. Androidstudio实现一个简易的加法器——分享两种方法实现(日常作业练习)

    Androidstudio实现一个简易的加法器——分享两种方法实现(日常作业练习)                                                           ...

  4. 基于 getter 和 setter 撸一个简易的MVVM

    Angular 和 Vue 在对Angular的学习中,了解到AngularJS 的两个主要缺点: 对于每一次界面时间,Ajax 或者 timeout,都会进行一个脏检查,而每一次脏检查又会在内部循环 ...

  5. 在 Chrome 中调试 Android 浏览器

    最近需要使用 Chrome Developer Tools 调试 Android 浏览器,但是官方指南并不是很好使,经过一番折腾,终于调试成功了,在此把经验分享给需要的朋友. Chrome Devel ...

  6. Angularjs,WebAPI 搭建一个简易权限管理系统

    Angularjs,WebAPI 搭建一个简易权限管理系统 Angularjs名词与概念(一)   1. 目录 前言 Angularjs名词与概念 权限系统原型 权限系统业务 数据库设计和实现 Web ...

  7. Tinywebserver:一个简易的web服务器

    这是学习网络编程后写的一个练手的小程序,可以帮助复习I/O模型,epoll使用,线程池,HTTP协议等内容. 程序代码是基于<Linux高性能服务器编程>一书编写的. 首先回顾程序中的核心 ...

  8. Opencv探索之路(二十):制作一个简易手动图像配准工具

    近日在做基于sift特征点的图像配准时遇到匹配失败的情况,失败的原因在于两幅图像分辨率相差有点大,而且这两幅图是不同时间段的同一场景的图片,所以基于sift点的匹配已经找不到匹配点了.然后老师叫我尝试 ...

  9. 使用Phalcon框架开发一个简易的博客系统

    使用Phalcon PHP框架开发一个简易的博客系统(类似于CMS) 最近在做Phalcon(Phalcon在英文中指的是鸟类中飞得最快的那一个物种,由于是高性能框架,借用了这个词)相关的项目,由于刚 ...

随机推荐

  1. 安装lombok(eclipse)

    下载 lombok.jar (https://projectlombok.org/download.html) 将 lombok.jar 放在eclipse安装目录下,和 eclipse.ini 文件 ...

  2. XUtils3 的 环境搭建与简单使用

    XUtils3 的 环境搭建 环境搭建三部曲 ----------------------- 说明 : author  修雨轩陈 使用andorid Studio 已经创建了一个项目 并且自己需要使用 ...

  3. 【Mood 21】要不要重复造轮子

    90%的人应该使用另外10%的人制造的轮子 但是每个人都应该有能力去创造属于自己的轮子 使用不代表伸手拿来,使用也是需要学习的,使用也可以升级为创新,关键在于这个轮子是在谁的手中! 90%的能套用着别 ...

  4. 夜色的 cocos2d-x 开发笔记 01

    现在我们来实现在屏幕上出现一只飞机的效果. 首先我们要建立一个场景,显示在屏幕上,创建一个类,RunScence,现在你的项目目录应该是这个样子的. 之前没学过C++,.h文件我理解就是一个声明文件, ...

  5. wxpython 对话框

    . 消息对话框(wx.MessageDialog) 消息对话框 与用户通信最基本的机制是wx.MessageDialog,它是一个简单的提示框. wx.MessageDialog可用作一个简单的OK框 ...

  6. django模板templates详解(二)

    1 总体结构 ​ Django是MTV结构,即:Model, Template, View Model:定义数据的存储格式,并且提供了数据库访问的API. View:定义那些数据被显示,是业务逻辑处理 ...

  7. oracle-2_dblink的创建和使用

    一.创建dblink 1.查询创建dblink表 SELECT * FROM DBA_DB_LINKS; ); BEGIN SELECT COUNT(*) INTO I FROM DBA_DB_LIN ...

  8. Opencv4android的Android Studio环境配置及项目实例下载

    因为软件竞赛的项目会用到Opencv for Android,所以就研究了一下如何在Android Studio上配置Opencv4Android 环境概述: Android Studio 2.3 O ...

  9. URL地址解析

    URL的一般格式为(带方括号[]的为可选项): protocol :// hostname[:port] / path /[?query]#fragment   1.protocol :// 为传输协 ...

  10. appendChild与Transition动画

    在createElement之后,直接把这个div append到body中,是不会触发css3 transition动画的 必须要让浏览器计算div的css属性后,然后再设置div的style,才会 ...