毕业设计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实现有道电子词典的更多相关文章

  1. 使用Android简单实现有道电子词典

    前言: 毕业设计的内容,仅仅有Java基础.没学过Android. 本着用到什么学什么.花费了10多个晚上完毕毕业设计. 当然,仅仅是简单的实线了电子词典功能,自始至终没有考虑过性能等问题. 本电子词 ...

  2. Android WebView 302斗争之旅

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

  3. Android WebView useragent

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

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

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

  5. Android WebView 开发教程

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

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

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

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

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

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

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

  9. android webview 底层实现的逻辑

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

随机推荐

  1. 你的java服务挂了吗

    问题背景 最近测试环境服务总是崩溃,运维小哥全部重启后还是崩溃,查看了服务运行情况占用内存确实挺高的,看来是时候优化一波jvm参数了. 优化前 top $(ps -e | grep java | aw ...

  2. Java添加、读取Excel公式

    操作excel表格用公式来处理数据时,可通过创建公式来运算数据,或通过读取公式来获取数据信息来源.本文以通过Java代码来演示在Excel中创建及读取公式的方法.这里使用了Excel Java类库(F ...

  3. JAVA并发之锁获取步骤及锁优化

    在另外的两篇文章中先后介绍了轻量级同步关键字volatile和重量级锁关键字synchronized,这两个关键字是Java语言中进行线程同步的基本方式(当然还有ReentrenLock等显式锁方式) ...

  4. html 贪吃蛇代码

    最近在搞自己的网站,维护的时候准备放个贪吃蛇上去,顶一下原有的页面. 这个贪吃蛇有一点毒.原来设定了100级:100级刚开局就挂了.后来改掉了选项菜单,修复了. 还有什么bug,欢迎点击侧边的QQ按钮 ...

  5. 通过例子学习C++(二)最小公倍数

    本文是通过例子学习C++的第二篇,通过这个例子可以快速入门c++相关的语法. 题目要求:输入两个整数,求其最小公倍数. 解答方法一:两个数的最小公倍数,是这两个数中的大数,或者是这2个数的倍数中的最小 ...

  6. C#调用Matlab生成的Dll

    问题描述:最近开发需要调用matlab生成的DLL,在New MWNumericArray 对象的时候报错,提示未将对象引用到对象的实例. 问题分析:因为MWArray.dll是Matlab提供的DL ...

  7. 1z0-062 题库解析4

    题目: Examine this parameter: NAME                     TYPE          VALUE ------------------------ -- ...

  8. 揭秘webpack plugin

    前言 Plugin(插件) 是 webpack 生态的的一个关键部分.它为社区提供了一种强大的方法来扩展 webpack 和开发 webpack 的编译过程.这篇文章将尝试探索 webpack plu ...

  9. python shutil 文件(夹)的复制、删除、移动、压缩和解压

    高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length])将文件内容拷贝到另一个文件中 import shutil shutil.copy ...

  10. 部署Maven项目到tomcat报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderLi

    Maven项目下update maven后Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderL     严重: Error config ...