Android对HTML的处理的例子

 更新时间:2016年9月20日 19:52  点击:1318
本文章来为各位介绍一篇关于 Android对HTML的处理的例子,希望这个例子能够帮助到各位朋友的哦,有兴趣的朋友同学可以和小编一起来看看吧。


在Android应用程序开发过程中,经常需要解析HTML文档,特别是那类通过“爬网站”抓取数据的应用,比如天气预报。Java常用的解析HTML文档的方法有以下几种:

使用正则表达式来抽取数据。

以纯字符串查找定位来实现。

使用HTML Parser解析器。

使用Jsoup解析器。

在Android平台上推荐使用Jsoup解析器来解析HTML文档。Jsoup既可以通过一个URL网址,也可以通过存储HTML脚本的文件或者存储HTML脚本的字符串作为数据源,然后通过DOM、CSS选择器来查找、抽取数据。

使用Jsoup解析字符串形式的HTML文件的方法如下:
// 定义需要解析的HTML字符串
String html = “<html><head><title>First parse</title></head>”
+ “<body><p>Parsed HTML into a doc.</p></body></html>”;
// 将字符串解析之后放到Document对象中
Document doc = Jsoup.parse(html);
}

下面是一个具体的解析列子,使用Jsoup从HTML文件中提取出超链接、超链接文本、页面描述等内容。
// 需要解析的HTML字符串
String html = “<p>An <a href=’http:// example.com/’><b>example</b></a> link.</p>”;
// 保存到Document对象中
Document doc = Jsoup.parse(html);
// 得到第一个a标签的超链接
Element link = doc.select(“a”).first();
// 取出HTML字符串中的文本内容
// 这里test的值为 An example link
String text = doc.body().text();
// 获取属性为href的字符串
// 这里linkHref的值为”http:// example.com/”
String linkHref = link.attr(“href”);
// 获取a标签内部的纯文本
// linkText为 “example”
String linkText = link.text();
// 获取整个a标签里面的字符串
// 这里linkOuterH的值为<a href=”http:// example.com”><b>example</b></a>
String linkOuterH = link.outerHtml();
// 获取a标签内部(不包含a标签)的全部字符串
// 这里linkInnerH的值为<b>example</b>
String linkInnerH = link.html();

Jsoup还可以使用Whitelist()方法把不规范的HTML格式整理为规范格式,Whitelist方法定义了哪些HTML的元素和属性可以保留,其他的全部会被删除掉。Whitelist.basic()方法允许通过的文本节点为:a、b、blockquote、br、cite、code、dd、dl、dt、em、i、li、ol、p、pre、q、small、strike、strong、sub、sup、u、ul,以及相应的属性,不允许图片通过。
具体的使用方法如下:
String unsafe =
“<p><a href=’http:// example.com/’ onclick=’stealCookies()’>Link</a></p>”;
// 调用clean方法整理不标准的代码
String safe = Jsoup.clean(unsafe, Whitelist.basic());
// safe为<p><a href=”http:// example.com/” rel=”nofollow”>Link</a></p>

在开发中返回顶部与底部我们经常会用到了,下面我们来看一篇关于Android监听ScrollView滑动到顶端和底部例子,具体的如下所示。

package zm.scroolview;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;

public class MainActivity extends Activity{
    private ScrollView sl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sl = (ScrollView) findViewById(R.id.sl);
        sl.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                switch (motionEvent.getAction()) {
                    case MotionEvent.ACTION_DOWN:

                        break;
                    case MotionEvent.ACTION_MOVE:
                        int scrollY=view.getScrollY();
                        int height=view.getHeight();
                        int scrollViewMeasuredHeight=sl.getChildAt(0).getMeasuredHeight();
                        if(scrollY==0){
                            System.out.println("滑动到了顶端 getScrollY()="+scrollY);
                        }
                        if((scrollY+height)==scrollViewMeasuredHeight){
                            System.out.println("滑动到了底部 scrollY="+scrollY);
                            System.out.println("滑动到了底部 height="+height);
                            System.out.println("滑动到了底部 scrollViewMeasuredHeight="+scrollViewMeasuredHeight);
                        }
                        break;

                    default:
                        break;
                }
                return false;
            }
        });
    }
}

Android和JavaScript会通过一些xml或者json数据来进行通用了,下面我们就来为各位介绍一个关于在JavaScript代码和客户端的Android代码间创建接口实现例子,具体的如下。

通过WebView,可以在JavaScript代码和客户端的Android代码间创建接口。例如,Android可以获取JavaScript里的输入。为了在你的JavaScript和Android代码间绑定一个新的接口,需要调用addJavascriptInterface(),传给它一个类实例来绑定到JavaScript,还需要一个接口名让JavaScript可以调用,以便来访问类。下面举个简单例子;

html文件:

<!DOCTYPE HTML>

<html xmlns=”http://www.w3.org/1999/xhtml” debug=”true”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″/>
<meta name=”viewport”
content=”width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0″>
<meta name=”apple-mobile-web-app-capable” content=”yes”>
<meta name=”viewport” content=”target-densitydpi=device-dpi”/>
<script type=”text/javascript”>
function init()
{
var testVal = document.getElementById(‘mytextId’).value;
AndroidFunction.showToast(testVal);
}

</script>
</head>
<body>
<div style=”float: left;width: 50%;”>
<input type=”text” style=”width: 180px;”
name=”myText” id=”mytextId”/>

</div>
<div style=”clear: both;height: 3px;”></div>
<div>
<input value=”submit” type=”button” name=”submit”
id=”btnSubmit” onclick=”javascript:return init();”/>
</div>
</body>
</html>

android布局xml文件:

<?xml version="1.0" encoding="utf-8"?>
<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:fitsSystemWindows="true"
    tools:context="com.example.zmit.webview.MainActivity"></pre>
<pre> <WebView
     android:id="@+id/wv1"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_weight="0.5"
     />
 
<LinearLayout
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
 android:layout_weight="1">
<TextView
 
 android:id="@+id/textView1"
 android:layout_width="wrap_content"
 android:layout_height="match_parent"
 android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout></pre>
<pre></LinearLayout>
代码:

public class MainActivity extends AppCompatActivity {
 
    WebView wView;
    private TextView myTextView;
    final Handler myHandler = new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        wView = (WebView) findViewById(R.id.wv1);
        myTextView = (TextView) findViewById(R.id.textView1);
        final JavaScriptInterface myJavaScriptInterface
                = new JavaScriptInterface(this);//交互接口
        wView.getSettings().setJavaScriptEnabled(true);
 
      wView.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");
 
        wView.loadUrl("file:///android_asset/untitled.html");
 
    }
 
    public class JavaScriptInterface {
 
        Context mContext;
 
        JavaScriptInterface(Context c) {
            mContext = c;
        }
        
        @JavascriptInterface
        public void showToast(String webMessage){
            final String msgeToast = webMessage;
            myHandler.post(new Runnable() {
                @Override
                public void run() {
                    myTextView.setText(msgeToast);
                }
            });
 
            Toast.makeText(mContext, webMessage, Toast.LENGTH_SHORT).show();
        }
    }
 
}

效果如下所示

本文章为各位介绍一篇关于WebView加载html标签中文乱码解决办法了,如果你碰到这类问题可以和小编一起来看看吧,具体的操作如下所示。

方法1:

String html="<p>我是测试用的标签</p>";
webView.loadData(html, "text/html", "utf-8");
效果如下:

lALOCsTfs80FAM0C0A_720_1280

 

啊嘞。乱码了。。试试下面的方法

方法2:

 String html="<p>我是测试用的标签</p>";
// webView.loadData(html, "text/html", "utf-8");
 webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
效果如下:

lALOCsUyIc0FAM0C0A_720_1280

可以了,完美。。。。

本文章为各位介绍一篇关于获取手机的屏幕宽高,density值,px 宽高,dp 的宽高,及px 和dp互转的例子,希望例子能够对大家有帮助。

直接贴代码

tvModel.setText(android.os.Build.MODEL);//手机型号

// 获取屏幕密度(方法1)
int screenWidth1 = getActivity().getWindowManager().getDefaultDisplay().getWidth();       // 屏幕宽(像素,如:480px)
int screenHeight1 = getActivity().getWindowManager().getDefaultDisplay().getHeight();      // 屏幕高(像素,如:800p)

tvScreenHeight1.setText(screenHeight1 + " px");
tvScreenWidth1.setText(screenWidth1 + " px");


// 获取屏幕密度(方法2)
DisplayMetrics dm2 = getResources().getDisplayMetrics();

float density = dm2.density;        // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
int densityDPI = dm2.densityDpi;     // 屏幕密度(每寸像素:120/160/240/320)
float xdpi = dm2.xdpi;
float ydpi = dm2.ydpi;

int screenWidth2 = dm2.widthPixels;      // 屏幕宽(像素,如:480px)
int screenHeight2 = dm2.heightPixels;     // 屏幕高(像素,如:800px)

tvScreenHeight2.setText(screenHeight2 + " px");
tvScreenWidth2.setText(screenWidth2 + " px");
tvScreenDensity2.setText(density + "");
tvScreenDensityDPI2.setText(densityDPI + "");

// 获取屏幕密度(方法3)
DisplayMetrics dm3 = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm3);

density = dm3.density;      // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
densityDPI = dm3.densityDpi;     // 屏幕密度(每寸像素:120/160/240/320)
xdpi = dm3.xdpi;
ydpi = dm3.ydpi;

tvScreenDensity3.setText(density + "");
tvScreenDensityDPI3.setText(densityDPI + "");

int screenWidth3 = dm3.widthPixels;          // 屏幕宽(px,如:480px)
int screenHeight3 = dm3.heightPixels;        // 屏幕高(px,如:800px)

tvScreenHeight3.setText(screenHeight3 + " px");
tvScreenWidth3.setText(screenWidth3 + " px");

float screenWidthDip = (dm3.widthPixels / density);    // 屏幕宽(dip,如:320dip)
float screenHeightDip = (dm3.heightPixels / density);   // 屏幕宽(dip,如:533dip)

tvScreenHeight4.setText(screenHeightDip + " dip");
tvScreenWidth4.setText(screenWidthDip + " dip");

[!--infotagslink--]

相关文章

  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • Windows批量搜索并复制/剪切文件的批处理程序实例

    这篇文章主要介绍了Windows批量搜索并复制/剪切文件的批处理程序实例,需要的朋友可以参考下...2020-06-30
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • BAT批处理判断服务是否正常运行的方法(批处理命令综合应用)

    批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。这篇文章主要介绍了BAT批处理判断服务是否正常运行(批处理命令综合应用),需要的朋友可以参考下...2020-06-30
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • Android设置TextView竖着显示实例

    TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
  • PHP file_get_contents设置超时处理方法

    file_get_contents的超时处理话说,从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents其实也可以POST数据。今天说的这篇是讲超时的,确实在...2013-10-04
  • IE6-IE9中tbody的innerHTML不能赋值的解决方法

    IE6-IE9中tbody的innerHTML不能赋值,重现代码如下 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>IE6-IE9中tbody的innerHTML不能复制bug</title> </head> <body style="height:3...2014-06-07
  • C#多线程中的异常处理操作示例

    这篇文章主要介绍了C#多线程中的异常处理操作,涉及C#多线程及异常的捕获、处理等相关操作技巧,需要的朋友可以参考下...2020-06-25
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20
  • postgresql 中的时间处理小技巧(推荐)

    这篇文章主要介绍了postgresql 中的时间处理小技巧(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-29
  • Android 实现钉钉自动打卡功能

    这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
  • Android 开发之布局细节对比:RTL模式

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02