开发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. Android 从 Web 唤起 APP

    前言 知乎在手机浏览器打开,会有个 App 内打开的按钮,点击直接打开且跳转到该详情页,是不是有点神奇,是如何做到的呢? 效果预览 Uri Scheme 配置 intent-filter Androi ...

  2. java 理解有符号数和无符号数

    转至:http://jinguo.iteye.com/blog/212049 理解有符号数和无符号数负数在计算机中如何表示呢? 这一点,你可能听过两种不同的回答. 一种是教科书,它会告诉你:计算机用“ ...

  3. MyISAM引擎表出现“Error 'Incorrect key file for table”

    mysql主从复制中的从库突然出现了警报,sql_thread停止了,show slave status\G;查看 mysql> show slave status\G ; . row **** ...

  4. mysql_01_游标的使用

    一.表的创建 1.直接创建表 DROP TABLE IF EXISTS shops_info; /*EMP产品版本版本信息表*/ CREATE TABLE shops_info ( ID INT PR ...

  5. ORACLE_LPAD_FUNCTION

    Oracle / PLSQL: LPAD Function This Oracle tutorial explains how to use the Oracle/PLSQL LPAD functio ...

  6. 基于ssh的多节点之间互信通信的实现

    实现条件:node1:192.168.176.6 主机名称是node1.magedu.com: node2:192.168.176.6 主机名称是node1.magedu.com: 实现目的:在节点n ...

  7. 【BZOJ2510】弱题

    题目大意 有\(M\)个球,一开始每个球均有一个初始标号,标号范围为\(1-N\)且为整数,标号为i的球有\(a_i\)个,并保证\(\sum a_i=M\). 每次操作等概率取出一个球(即取出每个球 ...

  8. MySQL:数据库入门篇3

    1.sql语句逻辑执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_t ...

  9. ZJOI2019Day2余姚中学游记(4.23~4.26)

    前言 \(Day2\),又是一场噩梦. 前段时间去做了挺多十二省联考和\(HNOI2019\)的题目,还订正掉了\(Day1\)的\(T1\)和\(T2\)(\(T3\)动态\(DP\)完全不想订正啊 ...

  10. c++字符串初始化

    #include<string> string s1 = "abcdefg"; string s2("abcdefg");