文档章节

通过WebView实现简单的浏览器

Jenly
 Jenly
发布于 2016/09/18 15:37
字数 721
阅读 8
收藏 0

对于WebView组件、虽然在做非浏览器app的时候用到的不多、但还是对这个组件的用法有个基本的了解、下面通过实现一个简单的浏览器的基本功能来熟悉下WebView组件、和它的一些基本使用方法、


布局文件:activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
   	android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ScrollView 
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
		<LinearLayout 
		    android:orientation="vertical"
		    android:layout_width="fill_parent"
	        android:layout_height="wrap_content">
		    <LinearLayout
		        android:id="@+id/layout" 
		        android:orientation="horizontal"
		        android:layout_width="fill_parent"
		        android:layout_height="wrap_content"
		        android:layout_margin="@dimen/margin_small">
			    <EditText
			        android:id="@+id/et_url"
			        android:layout_width="0dp"
			        android:layout_height="wrap_content"
			        android:layout_weight="1"
			        android:inputType="textUri"
			        android:singleLine="true"
			        android:layout_margin="@dimen/margin_small"/>
		
			    <Button
			        android:id="@+id/btn_visit"
			        android:layout_width="wrap_content"
			        android:layout_height="wrap_content"
			        android:layout_margin="@dimen/margin_small"
			        android:text="@string/visit"
			        android:textSize="@dimen/text_medium" />
		        
		    </LinearLayout>
	
			<WebView
				android:id="@+id/web"
				android:layout_width="fill_parent"
				android:layout_height="fill_parent"/>
		</LinearLayout>
	</ScrollView>
	<LinearLayout
	   android:id="@+id/ll_btn"
       android:orientation="horizontal"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:gravity="center_horizontal">
       <Button 
           android:id="@+id/btn_home"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:text="@string/home"/>
       <Button 
           android:id="@+id/btn_left"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:text="@string/left"/>
       <Button 
           android:id="@+id/btn_right"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:text="@string/right"/>
       <Button 
           android:id="@+id/btn_exit"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:text="@string/exit"/>
	</LinearLayout>

</LinearLayout>


简单浏览器实现代码:

public class MainActivity extends Activity implements OnClickListener{
	
	private EditText et_url;
	
	private Button btn_visit;
	
	private WebView web;
	
	private Button btn_home,btn_left,btn_right,btn_exit;
	
	private boolean isExit;

	private String homeStr = "http://www.baidu.com";
	
	//-------------------------------------------
	/**
	 * 基本数据初始化
	 */
	private void init(){
		
		isExit = false;
		et_url = (EditText)findViewById(R.id.et_url);
		et_url.setText(homeStr);
		btn_visit = (Button)findViewById(R.id.btn_visit);
		
		web = (WebView)findViewById(R.id.web);
		WebSettings ws = web.getSettings();
		//是否允许脚本支持
		ws.setJavaScriptEnabled(true);
		ws.setJavaScriptCanOpenWindowsAutomatically(true);
		ws.setSaveFormData(false);
		ws.setSavePassword(false);
		ws.setAppCacheEnabled(true);
		ws.setAppCacheMaxSize(10240);
//		ws.setCacheMode(WebSettings.LOAD_NO_CACHE);
		//是否允许缩放
//		ws.setBuiltInZoomControls(true);
		web.setWebViewClient(wvc);
		web.setWebChromeClient(wcc);
		
		btn_home = (Button)findViewById(R.id.btn_home);
		btn_left = (Button)findViewById(R.id.btn_left);
		btn_right = (Button)findViewById(R.id.btn_right);
		btn_exit = (Button)findViewById(R.id.btn_exit);
		
		btn_visit.setOnClickListener(this);
		btn_home.setOnClickListener(this);
		btn_left.setOnClickListener(this);
		btn_right.setOnClickListener(this);
		btn_exit.setOnClickListener(this);
		
		web.setOnTouchListener(touchListener);
		
		conn(et_url.getText().toString());
		
	}
	
	//-------------------------------------------
	/**
	 * 触摸监听
	 */
	OnTouchListener touchListener = new OnTouchListener() {
		
		public boolean onTouch(View v, MotionEvent event) {
			switch(v.getId()){
			case R.id.web:
				web.requestFocus();
				break;
			}
			return false;
		}
	};
	//-------------------------------------------
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        init();
    }
    
    
    //-------------------------------------------
    
    WebViewClient wvc = new WebViewClient(){
    	
    	public boolean shouldOverrideUrlLoading(WebView view, String url) {
    		
    		view.loadUrl(url);
    		et_url.setText(url);
    		
    		return true;
    	};
    };
    
    
    //-------------------------------------------
    
    WebChromeClient wcc = new WebChromeClient(){

		public void onRequestFocus(WebView view) {
			super.onRequestFocus(view);
			view.requestFocus();
			
		}
    	
    	
    };
    
    
    
    //-------------------------------------------
    /**
     * 访问url
     * @param urlStr
     */
    private void conn(String urlStr){
    	String url = "";
    	if(urlStr.contains("http://")){
    		url = urlStr;
    	}else{
    		url = "http://"+urlStr;
    	}
    	web.loadUrl(url);
    }
    
    //-------------------------------------------
    /**
     * 后退
     */
    private void goBack(){
    	if(web.canGoBack()){
    		web.goBack();
    	}else{
    		Toast.makeText(this, "已经是第一页",Toast.LENGTH_SHORT).show();
    	}
    }
    
    //-------------------------------------------
    /**
     * 前进
     */
    private void goForward(){
    	if(web.canGoForward()){
    		web.goForward();
    	}else{
    		Toast.makeText(this, "已经是最后一页",Toast.LENGTH_SHORT).show();
    	}
    }
    //-------------------------------------------
    /**
     * 退出
     */
    private void exit(){
    	
    	AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	
    	builder.setTitle("提示")
    	.setMessage("确定退出?")
    	.setPositiveButton("确定", dialogListener)
    	.setNegativeButton("取消", dialogListener)
    	.create()
    	.show();
    	
    }
    
    DialogInterface.OnClickListener dialogListener = new DialogInterface.OnClickListener() {
		
		public void onClick(DialogInterface dialog, int which) {
			
			switch (which) {
			case DialogInterface.BUTTON_POSITIVE:
				finish();
				break;

			default:
				dialog.cancel();
				break;
			}
		}
	};
    
    //-------------------------------------------
    
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    	
    	if(keyCode==KeyEvent.KEYCODE_BACK||web.canGoBack()){
    		web.goBack();
    		if(!web.canGoBack()){
    			if(isExit){
    				return super.onKeyDown(keyCode, event);
    			}
    			isExit = true;
    			Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();
    		}else{
    			isExit = false;
    		}
    	}
    	return true;
    	
    }
    
    
	//-------------------------------------------
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_visit:
			
			conn(et_url.getText().toString());
			
			break;
		case R.id.btn_home:
			

			conn(homeStr);
			break;
		case R.id.btn_left:
			goBack();
			break;
		case R.id.btn_right:
			goForward();
			break;
		case R.id.btn_exit:
			exit();
			break;

		}
	}

    
}


需要用到的联网权限:

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


这样一个简单的浏览器就实现了、我们来看下效果、


效果图如下:



本文转载自:http://blog.csdn.net/jenly121/article/details/13000007

Jenly

Jenly

粉丝 0
博文 35
码字总数 0
作品 0
深圳
私信 提问
关于用WebView或手机浏览器打开连接问题

注:该文章为(男人应似海)原创,如需转载请注明出处! 1.通常情况下 大家可能都想使用WebView打开网页内部链接而不想再调用手机浏览器,我们可以通过以下两种方法实现: (1)为WebView设置一...

迷途d书童
2012/03/28
2.2K
0
android简单网页浏览器的开发

android简单网页浏览器的开发 @author:郑海波 http://blog.csdn.net/nuptboyzhb/ 功能概要: 1.用WebView控件实现简单浏览器的开发 2.实现了网页浏览器的简单功能。 3.能够浏览网页中的所有...

长平狐
2012/10/08
2.8K
0
在 Flutter 中使用 WebView

本文示例代码可在微信公众号「01二进制」后台回复「WebView」查看下载 前言 我们知道在开发 Native App 时经常会有打开网页的需求,可供的选择通常只有两种: 在 App 内部打开网页 通过调用系...

雇个城管打天下
08/07
0
0
如何让Android WebView访问更快

为了让WebView访问快,一般都是用缓存技术,关于缓存这里有一篇文章讲的很详细 Android:手把手教你构建 WebView 的缓存机制 & 资源预加载方案,请务必看看 其实http协议有自身的缓存机制,a...

yale8848
2017/09/27
3.7K
2
Android WebView详解和调用JS

前言 Android开发的过程的中,现在越来越多的项目接入网页来显示数据,那么就要求我们会使用WebView来显示网页内容,今天就简单讲解一下WebView的简单使用。 WebView在Android平台上是一个特...

定陶黄公子
2016/12/16
82
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
37分钟前
4
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
8
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
11
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
10
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部