手机屏幕大小非常伤程序猿

励志成为一名Javaproject师的我。真的被它伤到了,不仅由于webView的强大。并且这个内容适合各样屏幕大小问题。

想当年苹果project师嘲笑安卓project师们加班在处理屏幕的适配,简直是在反复的工作,没想到多年后,苹果的手机也出现了屏幕大小不一样的,苹果project师哭倒在厕所里,万事真的没有绝对啊!

1.解析RSS的xml文件
如今大多数的新闻和杂志都会给大家RSS,我们须要解析它的xml文件。可是假设获取里面的数据时,注意它的标签并不都一样,须要注意。
                        File tempFile = Environment.getExternalStorageDirectory()
.getAbsoluteFile();
File file = new File(tempFile, (format.format(date) + ".xml"));
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(RSS_URL);
try {
HttpResponse response = client.execute(get);
if (response.getStatusLine().getStatusCode() == 200) {
InputStream inputStream = response.getEntity().getContent(); FileOutputStream fos = new FileOutputStream(file);
int byteread = 0;
byte[] buffer = new byte[1024];
while ((byteread = inputStream.read(buffer)) != -1) { fos.write(buffer, 0, byteread);
}
fos.flush();
fos.close();
inputStream.close();
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
                        list=new ArrayList<Map<String,RssItem>>();
SAXReader reader = new SAXReader();
try {
Document document = reader.read(file); // 通过reader对象的read方法获得document对象
Element rootelement = document.getRootElement(); // 获得根节点
Element channelelement = rootelement.element("channel");// 获得channel节点
Iterator channel_iterator = channelelement.elementIterator(); // 准备第一个模板,将须要改变的时间格式
String pat1 = "EEE, dd MMM yyyy HH:mm:ss Z" ;
// 准备第二个模板,将提取后的日期数字变为指定的格式
String pat2 = "yyyy年MM月dd日 HH时mm分" ;
Locale local=Locale.ENGLISH;
SimpleDateFormat sdf1 = new SimpleDateFormat(pat1,local) ; // 实例化模板对象
SimpleDateFormat sdf2 = new SimpleDateFormat(pat2) ; // 实例化模板对象
while (channel_iterator.hasNext()) {
//仅仅能放在map里,不能发在对象里
Map<String,RssItem>map1=new HashMap<String,RssItem>();
Element itemelement = (Element) channel_iterator.next();
if ("item".equals(itemelement.getName())) {
Iterator item_iterator = itemelement.elementIterator();
rssItem = new RssItem();
while (item_iterator.hasNext()) { Element itemChild = (Element) item_iterator.next(); if ("title".equals(itemChild.getName())) { rssItem.setTitle(itemChild.getStringValue());
Log.i("RSS", itemChild.getStringValue()); }
if ("link".equals(itemChild.getName())) {
rssItem.setLink(itemChild.getStringValue());
Log.i("RSS", itemChild.getStringValue());
}
if ("description".equals(itemChild.getName())) {
rssItem.setDescription(itemChild
.getStringValue());
Log.i("RSS", itemChild.getStringValue());
if (getImgStr(itemChild.getStringValue())!=null) {
//区第一个的url地址
rssItem.setImage(getImgStr(itemChild.getStringValue()));
}else{
rssItem.setImage("");
} }
if ("pubDate".equals(itemChild.getName())) { Date date1= sdf1.parse(itemChild.getStringValue());
String pubDate=sdf2.format(date1);
rssItem.setPubDate(pubDate);
Log.i("RSS", pubDate);
}
if ("author".equals(itemChild.getName())) { rssItem.setAuthor(itemChild.getStringValue());
Log.i("RSS", itemChild.getStringValue());
} }
if (rssItem.getImage().equals("")) { }else {
map1.put("rssItem", rssItem);
list.add(map1);
} //feed.addItem(map1); }
} } catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} Message message = new Message();
message.what = 1;
handler.sendMessage(message);
RSS_URL=null;
}

这种写法不要学习,须要把当中一部分写成公共的方法。由于也是在学习。全部后期会都封装成公用的方法。

2.时间的格式化
由于RSS里的文章日期格式是:Thu, 13 Aug 2015 11:30:00 +0800。 Calendar时间格式。我们须要的格式是2015年9月1日。

这个该怎么转换呢?网上找的都是以
new DATE()做为转换对象,这不符合我们实际情况,这时候你须要查询你的jdk文档了,在文档里能够找到他的格式:"EEE, dd MMM yyyy HH:mm:ss Z"。

        String a="Fri, 14 Aug 2015 02:20:10 +0800";//
String pat1 = "EEE, dd MMM yyyy HH:mm:ss Z" ; //EEE, dd MMM yyyy HH:mm:ss Z
// 准备第二个模板,将提取后的日期数字变为指定的格式
String pat2 = "yyyy年MM月dd日 HH时mm分ss秒SSS毫秒" ; //MOTH
//因为local生成非常费时间,提前生成
Locale local=Locale.ENGLISH;
SimpleDateFormat sdf1 = new SimpleDateFormat(pat1,local) ; // 实例化模板对象
SimpleDateFormat sdf2 = new SimpleDateFormat(pat2) ; // 实例化模板对象
try {
Date date= sdf1.parse(a);
System.out.println(sdf2.format(date));
} catch (ParseException e) {
e.printStackTrace();
}

   
对于这个应该都会非经常常使用。

3.手机大小适配
webView非常强大,可以显示html的内容,这让手机可以解析html,并且到了5.0 webView添加了更大的功能。我须要显示文章的图片,可是图片变会超出屏幕大小,为了能在每一个机子里显示的效果,须要加上这两行代码:
            //是内容与手机适配
bodyHtml.getSettings().setUseWideViewPort(true);
bodyHtml.getSettings().setLoadWithOverviewMode(true);

这样确实能够把图片变得适合手机大小,可是字体随着图片相同的变小了,因此我们须要把字体调大:

            //设置默认的字体大小
bodyHtml.getSettings().setDefaultFontSize(40);

这尽管不是最佳解决的方法,应该在RSS里文章的内容写设定好图片的最大大小,但假设在又一次改动img标签,会让图片多的文章载入变得慢。因此仅仅能委曲求全应这个办法,(网上写的大多数方法还是不能解决我的需求。还是在泡上在网上的日子找到解决的办法。该站点做的不错,风格我喜欢的类型,简洁风格)把所有代码显演示样例如以下:

                Intent itent=getIntent();
//文章内容
String title=itent.getStringExtra("content"); //去除超链接,保留字体
String regex="<\\s*a.*? /a\\s*>";
title=title.replaceAll(regex, ""); //加入html标头
String news="<html>"+title+"<html>"; //得到WebView组件
WebView bodyHtml=(WebView)this.findViewById(R.id.wv_paper_content); //设置默认的字体大小
bodyHtml.getSettings().setDefaultFontSize(40);
//是内容与手机适配
bodyHtml.getSettings().setUseWideViewPort(true);
bodyHtml.getSettings().setLoadWithOverviewMode(true); //可以的调用JavaScript代码
bodyHtml.getSettings().setJavaScriptEnabled(true);
bodyHtml.getSettings().setDefaultTextEncodingName("utf-8");
//载入HTML字符串进行显示
bodyHtml.loadDataWithBaseURL(null, news, "text/html", "utf-8", null);

总算把这个星期碰到的问题和解决的方法写完了。尽管仅仅是简单写下,并且还是学了两个星期的安卓。就開始做项目,可是真的学到了非常多知识,尤其运用到了web的知识,我也相信webApp才是未来的主潮。。。









android webView不简单的更多相关文章

  1. Android WebView 302斗争之旅

    一.背景 越来越多的业务接入,项目内多多少少会出现几个H5页面,只是单纯的提供WebView容器接入H5页面根本满足不了需求,他们需要登录态,需要制定协议控制Native的导航栏,或者需要JsBrid ...

  2. Android WebView useragent

    今天介绍一下Android WebView UserAgent, User-Agent(简称UA)是HTTP请求头部用来标识客户端信息的字符串, 包括操作系统, 浏览器等信息.为了建立手机客户端的信息 ...

  3. android webview开发问题及优化汇总

    我们在native与网页相结合开发的过程中,难免会遇到关于WebView一些共通的问题.就我目前开发过程中遇到的问题以及最后得到的优化方案都将在这里列举出来.有些是老生常谈,有些则是个人摸索得出解决方 ...

  4. Android WebView 开发教程

    声明在先:必须在AndroidMainfest.xml 里面声明权限,否则在Java里面编写的所有WebView浏览网页的代码都无法正常使用 <uses-permission android:n ...

  5. [Android] WebView内的本地网页,使用XMLHttpRequest读取本地档案

    [Android] WebView内的本地网页,使用XMLHttpRequest读取本地档案 问题情景 在Android里,可以使用WebView来呈现本地或是远程的网页内容.但是在显示本地网页时,如 ...

  6. Android webview通过http get下载文件下载两次的问题及解决方法

    一.现象 一般通过Android webview进行下载文件的方法是 1.重写DownloadListener的onDownloadStart方法,在onDownloadStart方法中弹出对话框提示 ...

  7. Android WebView常见问题及解决方案汇总

    Android WebView常见问题解决方案汇总: 就目前而言,如何应对版本的频繁更新呢,又如何灵活多变地展示我们的界面呢,这又涉及到了web app与native app之间孰优孰劣的争论. 于是 ...

  8. android webview 底层实现的逻辑

    其实在不同版本上,webview底层是有所不同的. 先提供个地址给大家查:http://grepcode.com/file/repository.grepcode.com/java/ext/com.g ...

  9. Android WebView访问SSL证书网页(onReceivedSslError)

    Android WebView访问https SSL证书网页,如淘宝,需要在onReceivedSslError添加SSL支持 webview.setWebViewClient(new WebView ...

随机推荐

  1. Python 2.7.9 Demo - 020.函数的定义、返回

    #coding=utf-8 #!/usr/bin/python def setConfig(): hello = 'world'; print 'The value has been setted.' ...

  2. UTF8字符串在lua的截取和字数统计【转载】

    转载自:GitHub:pangliang/pangliang.github.com 需求 按字面个数来截取 函数(字符串, 开始位置, 截取长度) utf8sub(,) = 好1世界哈 utf8sub ...

  3. [小技巧]Mac上chrome打开触控板双指前进后退功能

    Orz,本以为是默认开启的,结果发现并不是,从系统里找了半天发现没找到-就搜了一下,原来可以命令开启来 defaults write com.google.Chrome AppleEnableSwip ...

  4. LeetCode: Max Points on a Line 解题报告

    Max Points on a Line Given n points on a 2D plane, find the maximum number of points that lie on the ...

  5. C#中的委托应该定义在哪里

    专业回答 千锋教育 中国移动互联网研发培训领导品牌 2016-01-08 14:28 需求情况而定,一般定义在与类定义平级部分,且用public修饰,便于外部的调用. 若定义于类的内部,则必须通过调用 ...

  6. 基于jQuery商品分类选择提交表单代码

    分享一款基于jQuery商品分类选择提交表单代码.这是一款基于jQuery实现的商品信息选择列表表单提交代码. 在线预览   源码下载 实现的代码: <div class="yList ...

  7. buildroot 文件系统添加telnet, ssh, 以及制作注意事项

    buildroot 制作Linux嵌入式文件系统,并添加telnet 以及ssh * sshd 服务的添加 // make menuconfig Target options ---> Targ ...

  8. u-boot 2016.05 添加自己的board 以及config.h

    拿到一个uboot 后,我都想添加一个属于自己的board文件以及include/configs/*.h 文件. 如何添加这个些文件,今天来记录一下. 复制一份你所参考的板级文件,比如说board/v ...

  9. jQuery插件 -- Form表单插件jquery.form.js<转>

    jQuery Form插件是一个优秀的Ajax表单插件,可以非常容易地.无侵入地升级HTML表单以支持Ajax.jQuery Form有两个核心方法 -- ajaxForm() 和 ajaxSubmi ...

  10. windows server 2008 域控安装

    windows server 2008 域控安装:1.dns安装,安装过程会提示.net frame 3.51安装 3.域控安装 原文:地址 http://wenku.baidu.com/link?u ...