毕业设计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. [Linux实践] macOS平台Homebrew更新brew update卡死,完美解决

    [Linux实践] macOS 平台 Homebrew 更新 brew update 卡死,完美解决 版本2020.01.05 摘要: 使用brew install [软件包]安装软件包时,卡在Upd ...

  2. git简单使用指南

    git - 简易指南 这是一篇最适合初学者的教程,这里面没有高深的内容.学习git它可以帮助你管项目代码,提高团队开发效率.我使用的是win10系统,这里我会用它来给大家讲解. git - 安装 安装 ...

  3. 使用阿里云 ECS 快速部署 WordPress 博客系统

    今天在 阿里云 ECS上 部署了一套 Lamp 系统,建了一个WordPress的网站,把操作过程记录下来,文中所列脚本可以直接应用. 废话不多说直接开动,ECS云服务购买可以点击 阿里云ECS 云主 ...

  4. 01_console 你真的了解吗,不曾了解过得console~

    对于 console 你只知道 console.log 吗? 那你就 out 啦!!! // 1. 显示信息 console.log('hello'); console.info('信息'); con ...

  5. 4.eclipse中导入别人用的源代码问题

    最近在导入别人用的源代码问题时,出现两个问题: 问题一:提示无法解析导入,如下图: 解决方法:删除项目下的module-info.java文件即可,或者在创建项目时将创建module-info.jav ...

  6. model流程

    @RequestMapping("toDetail.do") public ModelAndView toDetail(HttpServletRequest request,Htt ...

  7. ffmpeg参数编码大全

    ffmpeg version N-49044-g89afa63 Copyright (c) 2000-2013 the FFmpeg developers built on Jan 19 2013 2 ...

  8. Java读取数据库中的xml格式内容,解析后修改属性节点内容并写回数据库

    直接附代码: 1.测试用的xml内容 <mxGraphModel> <root> <mxCell id="-1" /> <mxCell i ...

  9. 用markdown写博客,看这一篇就够了

    0. 前言 记得上次用markdown写博客,尽管我有markdown使用经验,但第一篇markdown博客还是不得已的"回滚"了. 传送门:记录一下第一次用markdown写博客 ...

  10. FJUT-1370 记录一次解题过程

    题目在福工院的1370 首先看题目,好家伙,全英文 那么大致的题意就是.有几个城市同在一条线上(相当于在x轴上),max i是第i个城市到其他所有城市的距离中的最大值,min i也就是所有中最小的. ...