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应用程序开发过程中,经常需要解析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>
通过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");
效果如下:
啊嘞。乱码了。。试试下面的方法
方法2:
String html="<p>我是测试用的标签</p>";
// webView.loadData(html, "text/html", "utf-8");
webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
效果如下:
可以了,完美。。。。