1、布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <include layout="@layout/title_bar" /> <FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent" > <WebView
android:id="@+id/wv_webview"
android:layout_width="match_parent"
android:layout_height="match_parent" /> <ProgressBar
android:id="@+id/pb_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</FrameLayout> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/title_red_bg" > <TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textColor="#fff"
android:textSize="22sp" /> <ImageButton
android:id="@+id/btn_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:background="@null"
android:src="@drawable/img_menu" /> <ImageButton
android:id="@+id/btn_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:background="@null"
android:src="@drawable/back"
android:visibility="gone" /> <LinearLayout
android:id="@+id/ll_controller"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:gravity="center"
android:orientation="horizontal"
android:visibility="gone" > <ImageButton
android:id="@+id/btn_textsize"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:background="@null"
android:src="@drawable/icon_textsize" /> <ImageButton
android:id="@+id/btn_share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:src="@drawable/icon_share" />
</LinearLayout> <ImageButton
android:id="@+id/btn_display"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:background="@null"
android:src="@drawable/icon_pic_grid_type"
android:visibility="gone" /> </RelativeLayout>

title_bar

2、页面实现

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebSettings.TextSize;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.onekeyshare.OnekeyShare;
import cn.sharesdk.onekeyshare.OnekeyShareTheme; import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject; /**
* 新闻详情页面
*
*/
public class NewsDetailActivity extends Activity implements OnClickListener { @ViewInject(R.id.ll_controller)
private LinearLayout llController;
@ViewInject(R.id.btn_back)
private ImageButton btnBack;
@ViewInject(R.id.btn_menu)
private ImageButton btnMenu;
@ViewInject(R.id.btn_textsize)
private ImageButton btnTextSize;
@ViewInject(R.id.btn_share)
private ImageButton btnShare;
@ViewInject(R.id.wv_webview)
private WebView mWebView;
@ViewInject(R.id.pb_loading)
private ProgressBar pbLoading;
private String mUrl; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_news_detail);
ViewUtils.inject(this); btnBack.setVisibility(View.VISIBLE);
btnMenu.setVisibility(View.GONE);
llController.setVisibility(View.VISIBLE); btnBack.setOnClickListener(this);
btnTextSize.setOnClickListener(this);
btnShare.setOnClickListener(this); mUrl = getIntent().getStringExtra("url"); // 加载网页
mWebView.loadUrl(mUrl); WebSettings settings = mWebView.getSettings();
settings.setBuiltInZoomControls(true);// 显示放大缩小按钮
settings.setUseWideViewPort(true);// 只是双击缩放
settings.setJavaScriptEnabled(true);// 打开js功能 mWebView.setWebViewClient(new WebViewClient() {
// 网页开始加载
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
System.out.println("网页开始加载");
pbLoading.setVisibility(View.VISIBLE);
} // 网页跳转
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// <a href="tel:110">联系我们</a>
// PhoneGap(js和本地代码互动)
System.out.println("网页跳转:" + url);
view.loadUrl(url);// 强制在当前页面加载网页, 不用跳浏览器
return true;
} // 网页加载结束
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
System.out.println("网页加载结束");
pbLoading.setVisibility(View.GONE);
}
}); mWebView.setWebChromeClient(new WebChromeClient() { // 加载进度回调
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
System.out.println("newProgress:" + newProgress);
} // 网页标题
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
System.out.println("title:" + title);
} }); } @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_back:
finish();
break;
case R.id.btn_textsize:
showChooseDialog();
break;
case R.id.btn_share:
showShare();
break; default:
break;
}
} // 点击确定前, 用户选择的字体大小的位置
private int mChooseItem;
// 当前的字体位置
private int mSelectItem = 2; /**
* 选择字体大小的弹窗
*/
private void showChooseDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("字体设置");
String[] items = new String[] { "超大号字体", "大号字体", "正常字体", "小号字体",
"超小号字体" };
builder.setSingleChoiceItems(items, mSelectItem,
new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
mChooseItem = which;
}
}); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) { WebSettings settings = mWebView.getSettings(); switch (mChooseItem) {
case 0:
settings.setTextSize(TextSize.LARGEST);
break;
case 1:
settings.setTextSize(TextSize.LARGER);
break;
case 2:
settings.setTextSize(TextSize.NORMAL);
break;
case 3:
settings.setTextSize(TextSize.SMALLER);
break;
case 4:
settings.setTextSize(TextSize.SMALLEST);
break; default:
break;
} mSelectItem = mChooseItem;
}
}); builder.setNegativeButton("取消", null);
builder.show();
} /**
* 确保SDcard下面存在此张图片
*/
private void showShare() {
ShareSDK.initSDK(this);
OnekeyShare oks = new OnekeyShare(); //修改主题
oks.setTheme(OnekeyShareTheme.SKYBLUE); // 关闭sso授权
oks.disableSSOWhenAuthorize(); // 分享时Notification的图标和文字 2.5.9以后的版本不调用此方法
// oks.setNotification(R.drawable.ic_launcher,
// getString(R.string.app_name));
// title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
oks.setTitle(getString(R.string.share));
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用
oks.setTitleUrl("http://sharesdk.cn");
// text是分享文本,所有平台都需要这个字段
oks.setText("我是分享文本");
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
oks.setImagePath("/sdcard/test.jpg");// 确保SDcard下面存在此张图片
// url仅在微信(包括好友和朋友圈)中使用
oks.setUrl("http://sharesdk.cn");
// comment是我对这条分享的评论,仅在人人网和QQ空间使用
oks.setComment("我是测试评论文本");
// site是分享此内容的网站名称,仅在QQ空间使用
oks.setSite(getString(R.string.app_name));
// siteUrl是分享此内容的网站地址,仅在QQ空间使用
oks.setSiteUrl("http://sharesdk.cn"); // 启动分享GUI
oks.show(this);
}
}

NewsDetailActivity

3、webview

默认不支持JS功能

WebSettings settings = mWebView.getSettings();
settings.setBuiltInZoomControls(true);// 显示放大缩小按钮
settings.setUseWideViewPort(true);// 只是双击缩放
settings.setJavaScriptEnabled(true);// 打开js功能

默认网页跳转是用浏览器,禁用浏览器

mWebView.setWebViewClient(new WebViewClient() {
// 网页开始加载
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
System.out.println("网页开始加载");
pbLoading.setVisibility(View.VISIBLE);
}

// 网页跳转
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// <a href="tel:110">联系我们</a>
// PhoneGap(js和本地代码互动)
System.out.println("网页跳转:" + url);
view.loadUrl(url);// 强制在当前页面加载网页, 不用跳浏览器
return true;
}

// 网页加载结束
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
System.out.println("网页加载结束");
pbLoading.setVisibility(View.GONE);
}
});

监听网页加载进度

mWebView.setWebChromeClient(new WebChromeClient() {

// 加载进度回调
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
System.out.println("newProgress:" + newProgress);
}

// 网页标题
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
System.out.println("title:" + title);
}

});

网页字体大小设置

位置表示选择new String[] { "超大号字体", "大号字体", "正常字体", "小号字体",
"超小号字体" };

// 点击确定前, 用户选择的字体大小的位置
private int mChooseItem;
// 当前的字体位置
private int mSelectItem = 2;

/**
* 选择字体大小的弹窗
*/
private void showChooseDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("字体设置");
String[] items = new String[] { "超大号字体", "大号字体", "正常字体", "小号字体",
"超小号字体" };
builder.setSingleChoiceItems(items, mSelectItem,
new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
mChooseItem = which;
}
});

builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {

WebSettings settings = mWebView.getSettings();

switch (mChooseItem) {
case 0:
settings.setTextSize(TextSize.LARGEST);
break;
case 1:
settings.setTextSize(TextSize.LARGER);
break;
case 2:
settings.setTextSize(TextSize.NORMAL);
break;
case 3:
settings.setTextSize(TextSize.SMALLER);
break;
case 4:
settings.setTextSize(TextSize.SMALLEST);
break;

default:
break;
}

mSelectItem = mChooseItem;
}
});

builder.setNegativeButton("取消", null);
builder.show();
}

在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择。这些功能我们叫它Android Dialog对话框,android起始已经提供了相应的接口Dialog Builder [AlertDialog]

网页跳转,调用本地应用等
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// <a href="tel:110">联系我们</a>
// PhoneGap(js和本地代码互动)
System.out.println("网页跳转:" + url);
view.loadUrl(url);// 强制在当前页面加载网页, 不用跳浏览器
return true;
}

android 项目学习随笔十四(WebView)的更多相关文章

  1. android 项目学习随笔十八(三级缓存)

    xUtils的BitmapUtils模块用的就是三级缓存,在项目中尽量还是应用BitmapUtils 三级缓存(机制) import com.itheima.zhsh66.R; import andr ...

  2. android 项目学习随笔十六( 广告轮播条播放)

    广告轮播条播放 if (mHandler == null) {//在此初始化mHandler , 保证消息不重复发送 mHandler = new Handler() { public void ha ...

  3. android 项目学习随笔十二(ListView加脚布局)

    1.ListView加脚布局 头布局initHeaderView,在onTouchEvent事件中进行显示隐藏头布局切换 脚布局initFooterView,实现接口OnScrollListener, ...

  4. android 项目学习随笔十(自定义ProgressBar)

    android:innerRadius 内部半径 android:thickness 厚度 gradient 渐变 android:useLevel="false" 取掉控件自带旋 ...

  5. android 项目学习随笔十九(MD5)

    import java.security.MessageDigest; public class MD5Encoder { public static String encode(String str ...

  6. android 项目学习随笔十五(ShareSDK开放平台)

    ShareSDK开放平台http://www.mob.com/#/

  7. android 学习随笔十四(页面跳转与数据传递)

    1.activity 创建第二个Activity 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> ...

  8. android 项目学习随笔二十(屏幕适配)

    1.图片适配 放入相同名称的资源文件,机器根据不同分辨率找相近的资源 240*320 ldpi 320*480 mdpi 480*800 hdpi 720*1280 xhdpi 2.布局适配 在不同的 ...

  9. android 项目学习随笔四(优化ViewPager)

    1.不能滑动的ViewPager import android.content.Context; import android.support.v4.view.ViewPager; import an ...

随机推荐

  1. JS-007-富文本域操作

    在日常 web 编写过程中,富文本域几乎成为了一个网站不可页面元素,同时,其也有着各种各样的实现方式,网络上也存在着各种各样的集成插件可供引用.此文以 js 获取.修改 163 邮箱写邮件时的邮件内容 ...

  2. 用Dictionary代替if

    public Dictionary<string, System.Drawing.RotateFlipType> dicRFT = new Dictionary<string, Sy ...

  3. maven3创建多模块web项目

    实现步骤 创建项目目录 进入“工作空间”目录,创建名为treasure的文件夹,切换至控制台,进入该文件夹. 配置模块 生成各个模块  maven-archetype-quickstart 默认的Ar ...

  4. 【转】Http Cache最基本的一些东西

    Http Cache最基本的一些东西 Cache浏览器IEwebkitApache  Http的Cache机制总共有4个组成部分: Cache-Control: max-age=N(seconds)  ...

  5. iOS ASIHTTPRequest 请求https

    iOS 终端请求服务端数据时,为了保证数据安全,我们一般会使用https协议加密,而对于iOS的网络编程,我们一般会使用开源框架:ASIHTTPRequest,但是如果使用传统的http方式,即使忽略 ...

  6. delegate and event

    事件是特殊的委托 委托:第一个方法注册用“=”,是赋值语法,因为要进行实例化,第二个方法注册则用的是“+=”   修饰符应该public的时候public,应该private的时候private 事件 ...

  7. Android --MainActivity模板

    系统自带的NavigationDrawerFragment 1.自动生成NavigationDrawerFragment,onCreatView代码如下 @Override public View o ...

  8. 文件传输基础——Java IO流

    一.文件的编码 package com.study.io; /** * 测试文件编码 */ public class EncodeDemo { /** * @param args * @throws ...

  9. Redhat linux 挂载命令mount

    命令格式: mount [-t vfstype] [-o options] device dir 其中: 1.-t vfstype 指定文件系统的类型,通常不必指定.mount 会自动选择正确的类型. ...

  10. [GDAL]读取HDF格式的calipso数据

    探测地球云层分布的CloudSat和CALIPSO卫星 http://www.nasa.gov/mission_pages/calipso/main/index.html http://www.nas ...