Android控件之WebView
如何在Android应用中打开Web网站呢?谷歌为我们提供了解决方案,现在就让我们一起看一下WebView控件吧。
为了方便总结,就以实现下面这个效果为主线,进行总结:

首先我们先看一下它的布局文件吧,整个界面分为上下两个部分,上部是一个类似于标题栏的效果,它是由两个Button按钮和一个TextView组成的,下部是一个WebView控件,通过AndroidManifest.xml去除系统的标题(如有不懂,请查阅我的上一遍博客:Android常用属性),已达到上图效果。为方便大家自学,下面奉上代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:weightSum="1">
<Button
android:id="@+id/quit"
android:layout_gravity="left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回"/>
<TextView
android:id="@+id/web"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="222dp"
android:layout_height="wrap_content"
android:layout_weight="1.13" />
<Button
android:id="@+id/news"
android:layout_gravity="right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="刷新"/>
</LinearLayout>
<ProgressBar
android:id="@+id/progressBar"
android:layout_below="@id/shaoyishao_value"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="4dip"
android:indeterminateOnly="false"
android:max="100"
android:progressDrawable="@drawable/progress_bar_states" />
<WebView
android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/> </LinearLayout>
进度条的配置文件:progress_bar_states.xml:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<gradient
android:startColor="#ff0000"
android:centerColor="#ffa600"
android:endColor="#ff5500"
/>
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<gradient
android:startColor="#234"
android:centerColor="#234"
android:endColor="#a24"
/>
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<gradient
android:startColor="#33000001"
android:centerColor="#40000000"
android:endColor="#44000000"
/>
</shape>
</clip>
</item>
</layer-list>
最后我们开始编写我们MainActivity.java:
public class MainActivity extends Activity {
private TextView mTextView;
private WebView mWebView;
private Button mbreak;
private Button mnews;
private ProgressBar pb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
public void init(){
mTextView = (TextView)findViewById(R.id.web);
mWebView = (WebView)findViewById(R.id.webView);
mbreak = (Button)findViewById(R.id.quit);
mnews = (Button)findViewById(R.id.news);
pb = (ProgressBar) findViewById(R.id.progressBar);
mbreak.setOnClickListener(new myListener());
mnews.setOnClickListener(new myListener());
mWebView.getSettings().setJavaScriptEnabled(true);//添加显示javascript声明
mWebView.loadUrl("http://www.baidu.com/");//设置打开的网址
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
pb.setVisibility(View.VISIBLE);
pb.setProgress(0);
mTextView.setText(title);//显示打开的网址信息
}
@Override
//显示进度条
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
pb.setProgress(newProgress);
if(newProgress==100){
pb.setVisibility(View.GONE);
}
}
});
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
});
}
//不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webValue.canGoBack()) {
webValue.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
//按钮点击事件监听
class myListener implements View.OnClickListener{
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.quit :
finish();
break;
case R.id.news :
mWebView.reload();
break;
}
}
}
}
最后不要忘在AndroidManifest.xml中添加使用网络声明:<uses-permission android:name="android.permission.INTERNET"/>
大功告成,我们的WebView初步介绍到此结束。
Android控件之WebView的更多相关文章
- (转载)android控件之WebView控件缩小
android控件之WebView控件缩小 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-16我要评论 发现这个控件挺好用,能自已控制进度条,而且这个控件的功能非常壮大,先上个简单的 ...
- android控件之webview和js与java交互
首先添加权限:<uses-permission android:name="android.permission.INTERNET"/> 布局文件: <Relat ...
- Android 控件: Webview 的一些知识点
WebView 加载网页,当点击返回键的时,会显示上一个页面,并刷新. 同时可以对返回上一个页面进行干预,就是用到了缓存. webview加载网页的几个模式,即websetting中设置的加载模式.w ...
- Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)
本人之前以前撰文描写叙述Appium和UIAutomator框架是怎样定位Android界面上的控件的. UIAutomator定位Android控件的方法实践和建议 Appium基于安卓的各种Fin ...
- Robotium之Android控件定位实践和建议
本人之前曾经撰文描述Appium和UIAutomator框架是如何定位Android界面上的控件的. UIAutomator定位Android控件的方法实践和建议Appium基于安卓的各种FindEl ...
- 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图
[源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...
- [Android Pro] android控件ListView顶部或者底部也显示分割线
reference to : http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在 ...
- Android控件Gridview实现仿支付宝首页,Fragment底部按钮切换和登录圆形头像
此案例主要讲的是Android控件Gridview(九宫格)完美实现仿支付宝首页,包含添加和删除功能:Fragment底部按钮切换的效果,包含四个模块,登录页面圆形头像等,一个小项目的初始布局. 效果 ...
- Android 控件架构及View、ViewGroup的测量
附录:示例代码地址 控件在Android开发的过程中是必不可少的,无论是我们在使用系统控件还是自定义的控件.下面我们将讲解一下Android的控件架构,以及如何实现自定义控件. 1.Android控件 ...
随机推荐
- boost的编译
第1步: 先从官网(www.boost.org)下载最新版的BOOST源码,如图所示 我这里下的是zip的那个第2步:编译源代码(放心.这里是傻瓜式的操作,很容易操作)(1)先把源代码放在E盘,例如 ...
- 深入浅出C#中的静态与非静态
C#语言静态类 vs 普通类 C#语言静态类与普通类的区别有以下几点: 1)C#语言静态类无法实例化而普通类可以: 2)C#语言静态类只能从System.Object基类继承:普通可以继承其它任何非 ...
- Eclipse配置tomcat后,启动tomcat,访问tomcat报404错误
当你在Eclipse中新建一个工程,配置好tomcat,然后测试tomcat是否配置成功的时候,报404错误异常. 解决方法: 1,把工程文件删除,重新建立一个新的工程, 2,新建一个工程. 3,Ne ...
- Hibernate快照
l当session加载了某个对象后,会为该对象的值类型的属性复制一份快照.当刷出缓存时,通过比较对象的当前属性和快照,来判断对象的哪些属性发生了变化. 代码如下: /** * 修改学生信息 */ @T ...
- phpcms v9 标签含义整理
{template "content","header"} ---------- 调用根目录下phpcms\template\content\header ...
- 《理解 ES6》阅读整理:函数(Functions)(三)Function Constructor & Spread Operator
增强的Function构造函数(Increased Capabilities of the Function Constructor) 在Javascript中Function构造函数可以让你创建一个 ...
- 初识selenium--百度实例录制
Selenium 是一个web的自动化测试工具,不少学习功能自动化的朋友首选的就是Selenium,它相比QTP有许多优点(QTP笔者由于种种原因暂未使用过O(∩_∩)O哈!): ①Selenium是 ...
- bootstrap-sidebar,后台边栏折叠功能
http://www.solutiisoft.com/bootstrap-sidebar/index.php
- 黑马程序员——File笔记读,写,复制
#region ReadAllBytes byte[] buffer = File.ReadAllBytes(@"C:\Users\dell\Desktop\新建文件夹.txt") ...
- maven配置发布仓库
首先,在工程的pom.xml中添加仓库信息 <distributionManagement> <repository> <id>releases</id> ...