开发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. learn OpenStack by picture

  2. Appcan开发之页面布局与CSS排版(转)

    在Appcan开发中,首先要进行的就是页面布局,然后在这个页面上填充数据,加上互动元素,最终构成完整的应用. 因为appcan是使用HTML5+CSS3+JavaScript技术来进行开发,所以与普通 ...

  3. python大数据

    http://blog.csdn.net/xnby/article/details/50782913 一句话总结:spark是一个基于内存的大数据计算框架, 上层包括了:Spark SQL类似Hive ...

  4. Azure镜像市场再下一城,中标软件入驻开启Azure国产操作系统时代

    近日,中标软件成功入驻 Azure 镜像市场,提供中标麒麟 Linux 的产品镜像服务,这样一来,中标麒麟也成为国内唯一能够在 Azure 公有云上运行的国产操作系统产品. 作为国内操作系统的领头羊, ...

  5. log4go的一些改进设想

    log4go 的 4.0.2 版本(https://github.com/ccpaging/log4go/tree/4.0.2)发布以后, 看了看别的 go 语言日志文件设计.发现了一篇好文: log ...

  6. day3-基础 列表,元组,字典,模块

    1.列表 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 Country = ['China','England','America'] 通过下标访问列 ...

  7. KVM虚拟化学习记录

    请查看我的有道云笔记: http://note.youdao.com/noteshare?id=ed7308eeb1ee675b406494f4ba042ba4&sub=047FD8C61BA ...

  8. 微信小程序开发实践

    目录 项目是否适合移植到小程序上? 概要介绍 实践得到的经验 规则 小程序不支持的 新特性 小窍门 会话管理 进阶 项目是否适合移植到小程序上? 小程序由于微信提供了一些组件,在微信中的一些体验确实不 ...

  9. 如何证明CRM WebClient UI上的应用是有状态(Stateful)的

    随便找一个在CRM WebClient UI里会被频繁调用到的函数,在函数里创建一个隐式增强,打印当前的会话ID. 不关闭浏览器,在浏览器里不断做操作,可以观察到不管做任何操作,每次断点出发后,打印出 ...

  10. FastJSON、Gson、Jackson(简单了解使用)

    下载地址(maven) Jackson:http://mvnrepository.com/search?q=jackson FastJson:http://mvnrepository.com/sear ...