一个简易的android浏览器。求指教!
开发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浏览器。求指教!的更多相关文章
- Jsoup抓取网页数据完成一个简易的Android新闻APP
前言:作为一个篮球迷,每天必刷NBA新闻.用了那么多新闻APP,就想自己能不能也做个简易的新闻APP.于是便使用Jsoup抓取了虎扑NBA新闻的数据,完成了一个简易的新闻APP.虽然没什么技术含量,但 ...
- android开发学习---开发一个简易的短信发送器
一.需求: 开发一个简易的短信发送器,输入:对方手机号码,短信内容,点击发送按钮,短信发送成功,对方手机成功收到短信. 其中要求短信内容过长时可以自动拆分,长度英文是160个英文,中文是70个,中英混 ...
- Androidstudio实现一个简易的加法器——分享两种方法实现(日常作业练习)
Androidstudio实现一个简易的加法器——分享两种方法实现(日常作业练习) ...
- 基于 getter 和 setter 撸一个简易的MVVM
Angular 和 Vue 在对Angular的学习中,了解到AngularJS 的两个主要缺点: 对于每一次界面时间,Ajax 或者 timeout,都会进行一个脏检查,而每一次脏检查又会在内部循环 ...
- 在 Chrome 中调试 Android 浏览器
最近需要使用 Chrome Developer Tools 调试 Android 浏览器,但是官方指南并不是很好使,经过一番折腾,终于调试成功了,在此把经验分享给需要的朋友. Chrome Devel ...
- Angularjs,WebAPI 搭建一个简易权限管理系统
Angularjs,WebAPI 搭建一个简易权限管理系统 Angularjs名词与概念(一) 1. 目录 前言 Angularjs名词与概念 权限系统原型 权限系统业务 数据库设计和实现 Web ...
- Tinywebserver:一个简易的web服务器
这是学习网络编程后写的一个练手的小程序,可以帮助复习I/O模型,epoll使用,线程池,HTTP协议等内容. 程序代码是基于<Linux高性能服务器编程>一书编写的. 首先回顾程序中的核心 ...
- Opencv探索之路(二十):制作一个简易手动图像配准工具
近日在做基于sift特征点的图像配准时遇到匹配失败的情况,失败的原因在于两幅图像分辨率相差有点大,而且这两幅图是不同时间段的同一场景的图片,所以基于sift点的匹配已经找不到匹配点了.然后老师叫我尝试 ...
- 使用Phalcon框架开发一个简易的博客系统
使用Phalcon PHP框架开发一个简易的博客系统(类似于CMS) 最近在做Phalcon(Phalcon在英文中指的是鸟类中飞得最快的那一个物种,由于是高性能框架,借用了这个词)相关的项目,由于刚 ...
随机推荐
- 安装lombok(eclipse)
下载 lombok.jar (https://projectlombok.org/download.html) 将 lombok.jar 放在eclipse安装目录下,和 eclipse.ini 文件 ...
- XUtils3 的 环境搭建与简单使用
XUtils3 的 环境搭建 环境搭建三部曲 ----------------------- 说明 : author 修雨轩陈 使用andorid Studio 已经创建了一个项目 并且自己需要使用 ...
- 【Mood 21】要不要重复造轮子
90%的人应该使用另外10%的人制造的轮子 但是每个人都应该有能力去创造属于自己的轮子 使用不代表伸手拿来,使用也是需要学习的,使用也可以升级为创新,关键在于这个轮子是在谁的手中! 90%的能套用着别 ...
- 夜色的 cocos2d-x 开发笔记 01
现在我们来实现在屏幕上出现一只飞机的效果. 首先我们要建立一个场景,显示在屏幕上,创建一个类,RunScence,现在你的项目目录应该是这个样子的. 之前没学过C++,.h文件我理解就是一个声明文件, ...
- wxpython 对话框
. 消息对话框(wx.MessageDialog) 消息对话框 与用户通信最基本的机制是wx.MessageDialog,它是一个简单的提示框. wx.MessageDialog可用作一个简单的OK框 ...
- django模板templates详解(二)
1 总体结构 Django是MTV结构,即:Model, Template, View Model:定义数据的存储格式,并且提供了数据库访问的API. View:定义那些数据被显示,是业务逻辑处理 ...
- oracle-2_dblink的创建和使用
一.创建dblink 1.查询创建dblink表 SELECT * FROM DBA_DB_LINKS; ); BEGIN SELECT COUNT(*) INTO I FROM DBA_DB_LIN ...
- Opencv4android的Android Studio环境配置及项目实例下载
因为软件竞赛的项目会用到Opencv for Android,所以就研究了一下如何在Android Studio上配置Opencv4Android 环境概述: Android Studio 2.3 O ...
- URL地址解析
URL的一般格式为(带方括号[]的为可选项): protocol :// hostname[:port] / path /[?query]#fragment 1.protocol :// 为传输协 ...
- appendChild与Transition动画
在createElement之后,直接把这个div append到body中,是不会触发css3 transition动画的 必须要让浏览器计算div的css属性后,然后再设置div的style,才会 ...