毕业设计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. 使用 Python 中 re 模块对测试用例参数化,进行搜索 search、替换 sub

    自动化测试用例,如果一百个接口要在Excel写100个sheet表单,每个接口有10个字段,里面有5个都可能是变化的,需要使用参数化,先试用特定的字符进行站位,在构造参数时在进行替换占位符: 一.用力 ...

  2. JVM之GC回收信息详解

    一.-XX:+PrintGCDetails 打印GC日志 参数配置:-Xms10M -Xmx10M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+Pr ...

  3. 「洛谷P1306」斐波那契公约数 解题报告

    P1306 斐波那契公约数 题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很"简单"问题:第n项和第m项的最大公 ...

  4. Codeforces Round #519 by Botan Investments(前五题题解)

    开个新号打打codeforces(以前那号玩废了),结果就遇到了这么难一套.touristD题用了map,被卡掉了(其实是对cf的评测机过分自信),G题没过, 700多行代码,码力惊人.关键是这次to ...

  5. 1031 查验身份证 (15 分)C语言

    题目描述 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10 ...

  6. 1061 判断题 (15 分)C语言

    判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分. 输入格式: 输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数和判断题数量.第二行给出 M ...

  7. 从0开发3D引擎(三):搭建开发环境

    本系列使用Reason语言,因此需要搭建它的开发环境. 上一篇博文 从0开发3D引擎(二):准备预备知识 搭建开发环境 建议使用VSCode编辑器来开发Reason,因为它的插件支持得最好. 具体搭建 ...

  8. Java解析文件内容

    本文主要实现对.chk文件的解析,将其内容读出来,存入到一个Map中,文件内容实例为: A0500220140828.CHK A05002 |34622511 |373532879 |3 识别分隔符| ...

  9. 【转】Java实现折半查找(二分查找)的递归和非递归算法

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wintys.blog.51cto.com/425414/94051 Java二分 ...

  10. Tarjin + 缩点

    链接:https://www.nowcoder.com/acm/contest/81/C来源:牛客网 题目描述 给出一个 0 ≤ N ≤ 105 点数.0 ≤ M ≤ 105 边数的有向图, 输出一个 ...