Android Webview实现有道电子词典
毕业设计android电子词典,先实现的一个小小的demo。
所谓的毕业设计就是用最短的时间学习一门语言,做出一个小的project。
activity_main.xml
<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:orientation="vertical"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal" > <TextView
android:id="@+id/tvDict"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:text="@string/tv_dict"
/>
<Spinner
android:id="@+id/sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
/>
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal" > <EditText
android:id="@+id/etInput"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="3"
android:text=""
android:hint=""/> <Button
android:id="@+id/btnSearch"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="1"
android:text="@string/btn_search"
/> <Button
android:id="@+id/btnClear"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="1"
android:text="@string/btn_clear"
/> </LinearLayout> <WebView
android:id="@+id/wvShow"
android:layout_height="0dp"
android:layout_width="fill_parent"
android:layout_weight="4"
android:focusable="false"
/> </LinearLayout>
JsonString.java
package com.example.webviewtest; import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL; public class JsonString { private String json; JsonString(){ } public void setStrJson(String json) {
this.json = json;
} public String getStrJson() {
return json;
} public void setJsonString(String word)throws Exception{ String urlPath = "http://fanyi.youdao.com/openapi.do?keyfrom=neverland&key=969918857&type=data&doctype=json&version=1.1&q=";
urlPath += word;
System.out.println(urlPath);
URL url = new URL(urlPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream inputStream = connection.getInputStream();
Reader reader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(reader);
String str = null;
StringBuffer stringBuffer = new StringBuffer();
while((str = bufferedReader.readLine())!= null){
stringBuffer.append(str);
}
reader.close();
connection.disconnect();
json = stringBuffer.toString();
} }
HtmlString.java
package com.example.webviewtest; import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL; public class HtmlString { private String webString; HtmlString(){ } public void setwebString(String webString) {
this.webString = webString;
} public String getwebString() {
return webString;
} public void setwebString(String word, String dict)throws Exception{ String urlPath = "http://m.youdao.com/singledict?le=eng&dict=";
urlPath = urlPath + dict + "&q=" + word;
//System.out.println(urlPath);
URL url = new URL(urlPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream inputStream = connection.getInputStream();
Reader reader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(reader);
String str = null;
StringBuffer stringBuffer = new StringBuffer();
while((str = bufferedReader.readLine())!= null){
stringBuffer.append(str);
}
reader.close();
connection.disconnect();
webString = stringBuffer.toString();
} }
MainActivity.java
package com.example.webviewtest; import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import org.json.JSONObject;
import org.json.JSONArray; public class MainActivity extends FragmentActivity { private Button btnSrarch;
private Button btnClear;
private EditText etInput;
private WebView wvShow;
InputMethodManager imm;
private Spinner spinner;
private String dictName;
private ArrayAdapter<String> adapter;
private static final String[] dict = { "基本释义", "柯林斯英汉双解大辞典", "21世纪大英汉词典",
"英英释义", "专业释义", "网络释义", "同根词", "同近义词", "双语例句", "原声例句", "权威例句", "百科" }; private static final String[]dicts = {"ec", "collins", "ec21", "ee",
"special", "web_trans", "rel_word", "syno", "blng_sents_part",
"media_sents_part", "auth_sents_part", "baike"}; private static final String linkCss = "<link rel=\"stylesheet\" href=\"file:///android_asset/style.css\" type=\"text/css\">"; private static final String body = "<html><head>" + linkCss + "</head><body class=\"p-dict\" style=\"height: 591px;\">";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); InitViews();
setListener(); // 内部打开连接
wvShow.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}); // 滚动条
wvShow.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); } public void Search() {
selectDict();
if (dictName == "ec") { //基本释义使用另外的接口
String word = etInput.getText().toString().trim();
StringBuffer buffer = new StringBuffer();
buffer.append("<html><head><link rel=\"stylesheet\" href=\"file:///android_asset/font.css\" type=\"text/css\"></head><body>");
JsonString json = new JsonString();
try {
json.setJsonString(word);
JSONObject jsonObject = new JSONObject(json.getStrJson());
JSONObject basic = jsonObject.getJSONObject("basic");
buffer.append("<p class=\"us-phonetic\">us-phonetic:" + basic.getString("us-phonetic") + "</p><br>");
buffer.append("<p class=\"uk-phonetic\">uk-phonetic:" + basic.getString("uk-phonetic") + "</p><br>");
JSONArray explains = basic.getJSONArray("explains");
for (int i = 0; i < explains.length(); i++) {
buffer.append(explains.getString(i) + "<br>");
}
buffer.append("</body></html>");
System.out.println(buffer.toString());
//wvShow.loadData(buffer.toString(), "text/html", "UTF-8");
//wvShow.getSettings().setDefaultTextEncodingName("UTF-8");
wvShow.loadDataWithBaseURL("", buffer.toString(), "text/html", "UTF-8", "");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else {
HtmlString htmlString = new HtmlString();
String word = etInput.getText().toString().trim();
try {
htmlString.setwebString(word, dictName);
String html = body + "<div id=\"" + dictName + "\" " +
"class=\"trans-container " + dictName + "\">"
+htmlString.getwebString() + "</div></body></html>";
//wvShow.getSettings().setDefaultTextEncodingName("UTF-8");
wvShow.loadDataWithBaseURL("http://m.youdao.com/",
html, "text/html", "UTF-8", null);
System.out.println(html);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // 软键盘开启则关闭,关闭则开启
imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
InputMethodManager.HIDE_NOT_ALWAYS);
}
} public void InitViews() //初始化
{
btnSrarch = (Button) findViewById(R.id.btnSearch);
btnClear = (Button) findViewById(R.id.btnClear);
etInput = (EditText) findViewById(R.id.etInput);
wvShow = (WebView) findViewById(R.id.wvShow);
wvShow.getSettings().setDefaultTextEncodingName("UTF-8");
spinner = (Spinner) findViewById(R.id.sp);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, dict);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
dictName = adapter.getItem(position);
} @Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
dictName = dict[0];
} });
} public void setListener() //设置监听器
{
// 键盘监听
etInput.setOnKeyListener(new OnKeyListener() { @Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_ENTER) {
Search();
wvShow.setFocusable(true);
wvShow.setFocusableInTouchMode(true);
wvShow.requestFocus();
}
return false;
}
}); // 搜索按钮监听
btnSrarch.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
String word = etInput.getText().toString();
word = word.trim();
if (word.length() == 0) {
Toast.makeText(MainActivity.this, "查询内容为空",
Toast.LENGTH_LONG).show();
} else {
// String urlString =
// "http://dict.youdao.com/m/search?keyfrom=dict.mindex&vendor=&q="+
// word;
// String urlString = "http://m.youdao.com/dict?le=eng&q="
// + word;
// wvShow.loadUrl(urlString);
Search();
wvShow.setFocusable(true);
wvShow.setFocusableInTouchMode(true);
wvShow.requestFocus();
} }
});
// 清除按钮监听
btnClear.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
etInput.setText("");
}
});
}
//选择辞典
public void selectDict() {
for (int i = 0; i < dict.length; i++) {
if (dictName == dict[i]) {
dictName = dicts[i];
break;
}
}
}
}
效果图
毕设电子词典效果图
Android Webview实现有道电子词典的更多相关文章
- 使用Android简单实现有道电子词典
前言: 毕业设计的内容,仅仅有Java基础.没学过Android. 本着用到什么学什么.花费了10多个晚上完毕毕业设计. 当然,仅仅是简单的实线了电子词典功能,自始至终没有考虑过性能等问题. 本电子词 ...
- Android WebView 302斗争之旅
一.背景 越来越多的业务接入,项目内多多少少会出现几个H5页面,只是单纯的提供WebView容器接入H5页面根本满足不了需求,他们需要登录态,需要制定协议控制Native的导航栏,或者需要JsBrid ...
- Android WebView useragent
今天介绍一下Android WebView UserAgent, User-Agent(简称UA)是HTTP请求头部用来标识客户端信息的字符串, 包括操作系统, 浏览器等信息.为了建立手机客户端的信息 ...
- android webview开发问题及优化汇总
我们在native与网页相结合开发的过程中,难免会遇到关于WebView一些共通的问题.就我目前开发过程中遇到的问题以及最后得到的优化方案都将在这里列举出来.有些是老生常谈,有些则是个人摸索得出解决方 ...
- Android WebView 开发教程
声明在先:必须在AndroidMainfest.xml 里面声明权限,否则在Java里面编写的所有WebView浏览网页的代码都无法正常使用 <uses-permission android:n ...
- [Android] WebView内的本地网页,使用XMLHttpRequest读取本地档案
[Android] WebView内的本地网页,使用XMLHttpRequest读取本地档案 问题情景 在Android里,可以使用WebView来呈现本地或是远程的网页内容.但是在显示本地网页时,如 ...
- Android webview通过http get下载文件下载两次的问题及解决方法
一.现象 一般通过Android webview进行下载文件的方法是 1.重写DownloadListener的onDownloadStart方法,在onDownloadStart方法中弹出对话框提示 ...
- Android WebView常见问题及解决方案汇总
Android WebView常见问题解决方案汇总: 就目前而言,如何应对版本的频繁更新呢,又如何灵活多变地展示我们的界面呢,这又涉及到了web app与native app之间孰优孰劣的争论. 于是 ...
- android webview 底层实现的逻辑
其实在不同版本上,webview底层是有所不同的. 先提供个地址给大家查:http://grepcode.com/file/repository.grepcode.com/java/ext/com.g ...
随机推荐
- 力扣142——环形链表 II
原题 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos ...
- 从0开发3D引擎(二):准备预备知识
大家好,本文介绍了开发3D引擎需要的预备知识,给出了相关的资源. 上一篇博文 从0开发3D引擎(一):开篇 了解Web 3D Web 3D的历史 目前Web 3D是基于WebGL这个Web端3D AP ...
- CF1277A. Happy Birthday, Polycarp! 题解 枚举/数位DP
题目链接:http://codeforces.com/contest/1277/problem/A 题目大意: 求区间 \([1,n]\) 范围内有多少只包含一个数字的数. 比如:\(1,77,777 ...
- ORA-00903表名无效关于${}和#{}的使用
相当于对数据 加上 双引号,$相当于直接显示数据 ${xxx}这样格式的参数会直接参与SQL编译,从而不能避免注入攻击 但可以使用在from之后传入表名 {}占位符? where之后 防止注入
- Java字符串(String类)
定义方法: 1.String demo = "test"; 2.String demo = new String(); 3.String demo = new String(&qu ...
- 常用Java静态代码分析工具的分析与比较
给国产静态代码检测工具Pinpoint打Call! 简介 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了4种现有的主流Java静态代码分析工具 (Checkstyle,FindBugs ...
- 曹工说Spring Boot源码(9)-- Spring解析xml文件,到底从中得到了什么(context命名空间上)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- Jaeger容器化部署
概述 Jaeger是由Uber开源的分布式追踪系统,一套完整的Jager追踪系统包括Jaeger-client.Jaeger-agent.Jaeger-collector.Database和Jaege ...
- 搭建个人OpenAPI
简介 OpenAPI Open API 即开放 API,也称开放平台. 所谓的开放 API(OpenAPI)是服务型网站常见的一种应用,网站的服务商将自己的网站服务封装成一系列 API(Applica ...
- Python爬虫入门教程 33-100 电影评论数据抓取 scrapy
1. 海王评论数据爬取前分析 海王上映了,然后口碑炸了,对咱来说,多了一个可爬可分析的电影,美哉~ 摘录一个评论 零点场刚看完,温导的电影一直很不错,无论是速7,电锯惊魂还是招魂都很棒.打斗和音效方面 ...