Android webView加载html代码详解
2016-04-27 17:08
537 查看
转至:http://xwangly.iteye.com/blog/1846387
最近的项目需要做一个如同微信中的腾讯新闻的功能,如下图所示:
直接上关键代码:
布局:
Xml代码
<?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="match_parent"
android:background="@color/contact_bg_gray"
android:orientation="vertical" >
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dip"
android:background="@drawable/big_corner_time"
android:gravity="center"
android:paddingBottom="2dip"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:paddingTop="2dip"
android:text="9:32"
android:textColor="@android:color/white"
android:textSize="18sp" />
<WebView
android:id="@+id/webView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/time"
android:layout_centerHorizontal="true"
android:layout_marginTop="8dip"
android:background="@color/contact_bg_gray"
android:layerType="software" />
</RelativeLayout>
颜色请自行替换。
Java代码
mWebView = (WebView) findViewById(R.id.webView1);
// holder.mWebView.loadUrl("http://www.baidu.com/");
WebSettings settings = mWebView.getSettings();
//
settings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
settings.setAppCacheEnabled(true);
int width = FAMobileApp.getDeviceWidth() - (int) (16 * FAMobileApp.getDensity());
int scaleInPercent = width * 100 / 322;
System.out.println("scaleInPercent:"+scaleInPercent);
mWebView.setInitialScale(scaleInPercent);
mWebView.setBackgroundColor(mContext.getResources().getColor(
R.color.contact_bg_gray));
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
System.out.println("shouldOverrideUrlLoading:"+url);
//此处可作转向操作
view.loadUrl(url);
return true;
}
@Override
public void onLoadResource(WebView view, String url) {
System.out.println("onLoadResource:"+url);
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view,
String url) {
System.out.println("shouldInterceptRequest:"+url);
//TODO Here we can replace the url
if (url.endsWith("cj_all_picture.png")) {
// try {
// InputStream is = mContext.getResources().getAssets().open("cj_all_tab_bg.png");
// WebResourceResponse response = new WebResourceResponse("image/gif", "utf-8", is);
// return response;
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
return null;
}
});
load(holder.mWebView);
private void load(WebView mWebView) {
try {
String basePath = "/data/data/com.xxx.xx/test";
StringBuilder content = new StringBuilder();
String path = basePath + "cjsd.html";
fis = new FileInputStream(path);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) != -1) {
content.append(new String(buffer, 0, len, "gbk"));
}
// System.out.println(content);
mWebView.getSettings().setDefaultTextEncodingName("utf-8");
String baseUrl = "file://" + basePath;
mWebView.loadDataWithBaseURL(baseUrl, content.toString(), "text/html", "utf-8",
null);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
使用的cjsc.html如下
Html代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<style>
<!--
body{text-align:center;
margin:0 0;
padding:0px;
}
.contentbg{margin:0 auto;
width:322px;
height:382px;
}
.content{
margin:0px auto;
width:291px;
height:369px;
background:#FFFFFF;
border-radius:10px;
border:#c6c6c6 solid 2px;
-moz-box-shadow:0px 2px 3px #999;
-webkit-box-shadow:0px 2px 3px #999;
box-shadow:0px 2px 4px #999;
}
.content_abg{
margin:0;
width:293px;
height:175px;
padding-top:11px
}
.content_a{background:url(cj_all_picture.png) no-repeat;
width:267px;
height:151px;
margin-left:13px;
margin-bottom:14px;
}
.content_bbg{
margin:0;
width:293px;
height:196px;
clear:both;
}
.content_b_line{width:291px;
height:1px;
background:#e6e6e6;
}
.content_b{width:288px;
height:63px;
margin:0;
overflow:hidden;
}
.content_b1{width:200px;
height:63px;
margin:0;
float:left;
padding-left:13px;
padding-top:9px;
color:#000000;
font-size:14px;
text-align:left;
font-family:"微软雅黑";
line-height:12px;
}
.content_b1 a:link{
color:#000000;
text-decoration:none;
}
.content_b1 a:visited{
color:#000000;
text-decoration:none;
}
.content_b1 a:hover{
color: #000000;
text-decoration: none;
}
.content_b1_a{
color:#4e4e4e;
font-size:13px;
text-align:left;
font-family:"微软雅黑";
}
.content_b1_a a:link{
color:#4e4e4e;
text-decoration:none;
}
.content_b1_a a:visited{
color:#4e4e4e;
text-decoration:none;
}
.content_b1_a a:hover{
color: #4e4e4e;
text-decoration: none;
}
.content_b2{float:right;
height:60px;
width:73px;
margin:0px;
}
.content_b2_a{
height:51px;
width:51px;
margin:6px;
background: url(cj_all_icon_xgsg.png);
float:left;
}
.content_b2_b{
height:51px;
width:51px;
margin:6px;
background: url(cj_all_icon_cjkx.png);
float:left;
}
.content_b2_c{
height:51px;
width:51px;
margin:6px;
background: url(cj_all_icon_cjsd.png);
float:left;
}
.content_ba{width:288px;
height:63px;
margin:0;
background:#3b94d6;
}
.content_b3{width:215px;
height:63px;
margin:0;
float:left;
padding-left:13px;
padding-top:12px;
color:#000000;
font-size:19px;
text-align:left;
font-family:"微软雅黑";
line-height:12px;
}
.content_b3 a:link{
color:#000000;
text-decoration:none;
}
.content_b3 a:visited{
color:#000000;
text-decoration:none;
}
.content_b3 a:hover{
color: #FFFFFF;
text-decoration: none;
}
.content_b3_a{
color:#4e4e4e;
font-size:13px;
text-align:left;
font-family:"微软雅黑";
}
.content_b3_a a:link{
color:#4e4e4e;
text-decoration:none;
}
.content_b3_a a:visited{
color:#4e4e4e;
text-decoration:none;
}
.content_b3_a a:hover{
color: #FFFFFF;
text-decoration: none;
}
//-->
</style>
<title>长江视点</title>
</head>
<body>
<div class="contentbg">
<div class="content">
<div class="content_abg">
<a href="#"><div class="content_a"></div></a>
<div class="content_bbg">
<div class="content_b_line"> </div>
<div class="content_b">
<div class="content_b1"> <a href="#">长江快讯</a><br />
<br />
<span class="content_b1_a"><a href="#">A股500点上涨耗尽多方子弹</a></span> </div>
<div class="content_b2"> <a href="#">
<div class="content_b2_b"> </div>
</a> </div>
</div>
<div class="content_b_line"> </div>
<div class="content_b">
<div class="content_b1"> <a href="#">长江快讯</a><br />
<br />
<span class="content_b1_a"><a href="#">A股500点上涨耗尽多方子弹</a></span> </div>
<div class="content_b2"> <a href="#">
<div class="content_b2_a"> </div>
</a> </div>
</div>
<div class="content_b_line"></div>
<div class="content_b">
<div class="content_b1">
<a href="#">长江快讯</a><br><br>
<span class="content_b1_a"><a href="#">A股500点上涨耗尽多方子弹</a></span>
</div>
<div class="content_b2">
<a href="#"><div class="content_b2_c">
</div> </a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
图片资源请自行替换
使用WebView加载HTML资源
最近的项目需要做一个如同微信中的腾讯新闻的功能,如下图所示:直接上关键代码:
布局:
Xml代码
<?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="match_parent"
android:background="@color/contact_bg_gray"
android:orientation="vertical" >
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dip"
android:background="@drawable/big_corner_time"
android:gravity="center"
android:paddingBottom="2dip"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:paddingTop="2dip"
android:text="9:32"
android:textColor="@android:color/white"
android:textSize="18sp" />
<WebView
android:id="@+id/webView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/time"
android:layout_centerHorizontal="true"
android:layout_marginTop="8dip"
android:background="@color/contact_bg_gray"
android:layerType="software" />
</RelativeLayout>
颜色请自行替换。
Java代码
mWebView = (WebView) findViewById(R.id.webView1);
// holder.mWebView.loadUrl("http://www.baidu.com/");
WebSettings settings = mWebView.getSettings();
//
settings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
settings.setAppCacheEnabled(true);
int width = FAMobileApp.getDeviceWidth() - (int) (16 * FAMobileApp.getDensity());
int scaleInPercent = width * 100 / 322;
System.out.println("scaleInPercent:"+scaleInPercent);
mWebView.setInitialScale(scaleInPercent);
mWebView.setBackgroundColor(mContext.getResources().getColor(
R.color.contact_bg_gray));
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
System.out.println("shouldOverrideUrlLoading:"+url);
//此处可作转向操作
view.loadUrl(url);
return true;
}
@Override
public void onLoadResource(WebView view, String url) {
System.out.println("onLoadResource:"+url);
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view,
String url) {
System.out.println("shouldInterceptRequest:"+url);
//TODO Here we can replace the url
if (url.endsWith("cj_all_picture.png")) {
// try {
// InputStream is = mContext.getResources().getAssets().open("cj_all_tab_bg.png");
// WebResourceResponse response = new WebResourceResponse("image/gif", "utf-8", is);
// return response;
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
return null;
}
});
load(holder.mWebView);
private void load(WebView mWebView) {
try {
String basePath = "/data/data/com.xxx.xx/test";
StringBuilder content = new StringBuilder();
String path = basePath + "cjsd.html";
fis = new FileInputStream(path);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) != -1) {
content.append(new String(buffer, 0, len, "gbk"));
}
// System.out.println(content);
mWebView.getSettings().setDefaultTextEncodingName("utf-8");
String baseUrl = "file://" + basePath;
mWebView.loadDataWithBaseURL(baseUrl, content.toString(), "text/html", "utf-8",
null);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
使用的cjsc.html如下
Html代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<style>
<!--
body{text-align:center;
margin:0 0;
padding:0px;
}
.contentbg{margin:0 auto;
width:322px;
height:382px;
}
.content{
margin:0px auto;
width:291px;
height:369px;
background:#FFFFFF;
border-radius:10px;
border:#c6c6c6 solid 2px;
-moz-box-shadow:0px 2px 3px #999;
-webkit-box-shadow:0px 2px 3px #999;
box-shadow:0px 2px 4px #999;
}
.content_abg{
margin:0;
width:293px;
height:175px;
padding-top:11px
}
.content_a{background:url(cj_all_picture.png) no-repeat;
width:267px;
height:151px;
margin-left:13px;
margin-bottom:14px;
}
.content_bbg{
margin:0;
width:293px;
height:196px;
clear:both;
}
.content_b_line{width:291px;
height:1px;
background:#e6e6e6;
}
.content_b{width:288px;
height:63px;
margin:0;
overflow:hidden;
}
.content_b1{width:200px;
height:63px;
margin:0;
float:left;
padding-left:13px;
padding-top:9px;
color:#000000;
font-size:14px;
text-align:left;
font-family:"微软雅黑";
line-height:12px;
}
.content_b1 a:link{
color:#000000;
text-decoration:none;
}
.content_b1 a:visited{
color:#000000;
text-decoration:none;
}
.content_b1 a:hover{
color: #000000;
text-decoration: none;
}
.content_b1_a{
color:#4e4e4e;
font-size:13px;
text-align:left;
font-family:"微软雅黑";
}
.content_b1_a a:link{
color:#4e4e4e;
text-decoration:none;
}
.content_b1_a a:visited{
color:#4e4e4e;
text-decoration:none;
}
.content_b1_a a:hover{
color: #4e4e4e;
text-decoration: none;
}
.content_b2{float:right;
height:60px;
width:73px;
margin:0px;
}
.content_b2_a{
height:51px;
width:51px;
margin:6px;
background: url(cj_all_icon_xgsg.png);
float:left;
}
.content_b2_b{
height:51px;
width:51px;
margin:6px;
background: url(cj_all_icon_cjkx.png);
float:left;
}
.content_b2_c{
height:51px;
width:51px;
margin:6px;
background: url(cj_all_icon_cjsd.png);
float:left;
}
.content_ba{width:288px;
height:63px;
margin:0;
background:#3b94d6;
}
.content_b3{width:215px;
height:63px;
margin:0;
float:left;
padding-left:13px;
padding-top:12px;
color:#000000;
font-size:19px;
text-align:left;
font-family:"微软雅黑";
line-height:12px;
}
.content_b3 a:link{
color:#000000;
text-decoration:none;
}
.content_b3 a:visited{
color:#000000;
text-decoration:none;
}
.content_b3 a:hover{
color: #FFFFFF;
text-decoration: none;
}
.content_b3_a{
color:#4e4e4e;
font-size:13px;
text-align:left;
font-family:"微软雅黑";
}
.content_b3_a a:link{
color:#4e4e4e;
text-decoration:none;
}
.content_b3_a a:visited{
color:#4e4e4e;
text-decoration:none;
}
.content_b3_a a:hover{
color: #FFFFFF;
text-decoration: none;
}
//-->
</style>
<title>长江视点</title>
</head>
<body>
<div class="contentbg">
<div class="content">
<div class="content_abg">
<a href="#"><div class="content_a"></div></a>
<div class="content_bbg">
<div class="content_b_line"> </div>
<div class="content_b">
<div class="content_b1"> <a href="#">长江快讯</a><br />
<br />
<span class="content_b1_a"><a href="#">A股500点上涨耗尽多方子弹</a></span> </div>
<div class="content_b2"> <a href="#">
<div class="content_b2_b"> </div>
</a> </div>
</div>
<div class="content_b_line"> </div>
<div class="content_b">
<div class="content_b1"> <a href="#">长江快讯</a><br />
<br />
<span class="content_b1_a"><a href="#">A股500点上涨耗尽多方子弹</a></span> </div>
<div class="content_b2"> <a href="#">
<div class="content_b2_a"> </div>
</a> </div>
</div>
<div class="content_b_line"></div>
<div class="content_b">
<div class="content_b1">
<a href="#">长江快讯</a><br><br>
<span class="content_b1_a"><a href="#">A股500点上涨耗尽多方子弹</a></span>
</div>
<div class="content_b2">
<a href="#"><div class="content_b2_c">
</div> </a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
图片资源请自行替换
相关文章推荐
- Android Studio项目构建时遇到的常见问题及解决办法
- Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题
- android 控件 下拉刷新 FlyRefersh
- 将Eclipse代码导入到AndroidStudio的两种方式
- MPAndroidChart开源图表库(一)之饼状图
- Android-RecyclerView使用(三) 实现下拉刷新,上拉自动加载
- AndroidStudio设置自定义代码格式化
- 浅析总结 Android Studio 中 Gradle 配置运行
- Android studio插件GsonFormat 的使用
- Android手势密码的实现
- android 高德地图 点击marker后,该marker不会成为中心点
- 彻底解决 Canvas 引起的 java.lang.unsupported operation exception, android.view.GLES20Canvas.clipPath(GLES20
- Android学习笔记——XML解析
- Android 设计模式之适配器模式
- android volley 框架图片请求后有时会导致第一次初始化过慢的原因
- Android内存优化-图片资源
- Android 中使 EditText 失去焦点,禁止弹出软键盘,及 弹出软键盘后 EditText 自动上移 不致被遮挡
- Android 开发值得订阅的日报和周刊
- android studio Duplicate files copied in APK META-INF/NOTICE
- Android6.0 短信界面,添加多个收件人名字概率性不显示