使用Android簡單實現有道電子詞典

來源:互聯網
上載者:User

標籤:

前言:

畢業設計的內容,僅僅有Java基礎。沒學過Android。

本著用到什麼學什麼。花費了10多個晚上完畢畢業設計。

當然,僅僅是簡單的實線了電子詞典功能,自始至終沒有考慮過效能等問題。

本電子詞典的資料檔案是不錯的,有道的API是分析有道電子詞典的記錄檔得到的,離線的柯林斯詞典是Mdict詞典的MDX檔案轉換(https://bitbucket.org/xwang/mdict-analysis)來的。這個是本電子詞典的唯一亮點吧。由於我一直認為資料比介面更重要。

檔案布局:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveF9peWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

核心檔案介紹例如以下:

布局介面:


public class MainActivity extends FragmentActivity implements OnClickListener {private ImageView dict_image;private ImageView translate_image;private ImageView account_image;private RelativeLayout dict_layout;private RelativeLayout translate_layout;private RelativeLayout account_layout;private DictFragment dictfragment;private TransFragment transFragment;private MyFragment myFragment;private FragmentManager fManager;SQLiteDatabase db;private final String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + "/Mdict";private final String DATABASE_FILENAME = "dict.db";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);fManager = getSupportFragmentManager();initViews();db = openDatabase();//Cursor cs = db.rawQuery("select * from WORDBOOK where WORD='reservation'",null);//while (cs.moveToNext()) {//Toast.makeText(MainActivity.this, cs.getString(3), 0).show();//}}@Overrideprotected void onDestroy() {db.close();super.onDestroy();}public void initViews() {dict_image = (ImageView) findViewById(R.id.dict_image);translate_image = (ImageView) findViewById(R.id.translate_image);account_image = (ImageView) findViewById(R.id.account_image);dict_layout = (RelativeLayout) findViewById(R.id.dict_layout);translate_layout = (RelativeLayout) findViewById(R.id.translate_layout);account_layout = (RelativeLayout) findViewById(R.id.account_layout);dict_layout.setBackgroundColor(Color.parseColor("#FDF5E6"));translate_layout.setBackgroundColor(Color.parseColor("#FDF5E6"));account_layout.setBackgroundColor(Color.parseColor("#FDF5E6"));dict_layout.setOnClickListener(this);translate_layout.setOnClickListener(this);account_layout.setOnClickListener(this);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.dict_layout:setChioceItem(0);break;case R.id.translate_layout:setChioceItem(1);break;case R.id.account_layout:setChioceItem(2);break;default:break;}}public void setChioceItem(int index) {FragmentTransaction transaction = fManager.beginTransaction();clearChioce();hideFragments(transaction);switch (index) {case 0:dict_image.setImageResource(R.drawable.tab_dict_pressed);dict_layout.setBackgroundColor(Color.parseColor("#FDF5E6"));if (dictfragment == null) {dictfragment = new DictFragment();transaction.add(R.id.content, dictfragment);}else {transaction.show(dictfragment);}break;case 1:translate_image.setImageResource(R.drawable.tab_translate_pressed);translate_layout.setBackgroundColor(Color.parseColor("#FDF5E6"));if (transFragment == null) {transFragment = new TransFragment();transaction.add(R.id.content, transFragment);}else {transaction.show(transFragment);}break;case 2:account_image.setImageResource(R.drawable.tab_account_pressed);account_layout.setBackgroundColor(Color.parseColor("#FDF5E6"));if (myFragment == null) {myFragment = new MyFragment();transaction.add(R.id.content, myFragment);}else {transaction.show(myFragment);}break;default:break;}transaction.commit();}public void clearChioce(){dict_image.setImageResource(R.drawable.tab_dict_normal);dict_layout.setBackgroundColor(Color.parseColor("#FDF5E6"));translate_image.setImageResource(R.drawable.tab_translate_normal);translate_layout.setBackgroundColor(Color.parseColor("#FDF5E6"));account_image.setImageResource(R.drawable.tab_account_normal);account_layout.setBackgroundColor(Color.parseColor("#FDF5E6"));}public void hideFragments(FragmentTransaction transaction) {if (dictfragment != null) {transaction.hide(dictfragment);}if (transFragment != null) {transaction.hide(transFragment);}if (myFragment != null) {transaction.hide(myFragment);}}public SQLiteDatabase openDatabase()    {        try        {            String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;            File dir = new File(DATABASE_PATH);            if (!dir.exists())                dir.mkdir();            if (!(new File(databaseFilename)).exists())            {                InputStream is = getResources().openRawResource(R.raw.dict);                FileOutputStream fos = new FileOutputStream(databaseFilename);                byte[] buffer = new byte[8192];                int count = 0;                                while ((count = is.read(buffer)) > 0)                {                    fos.write(buffer, 0, count);                }                fos.close();                is.close();            }                       SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);            return database;        }        catch (Exception e)        {        }        return null;    }}

每日一句介面:


public class Start extends Activity {private ImageView ivStart;private SimpleDateFormat sdf;private String date;//http://cdn.iciba.com/web/news/longweibo/imag/2015-05-03.jpgprivate static final String url = "http://cdn.iciba.com/web/news/longweibo/imag/";private Handler handle = new Handler() {          public void handleMessage(Message msg) {              switch (msg.what) {              case 0:                  Bitmap bmp=(Bitmap)msg.obj;                  ivStart.setImageBitmap(bmp);                  break;              }          };      };  @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.start_layout);ivStart = (ImageView) findViewById(R.id.ivStart);sdf = new SimpleDateFormat("yyyy-MM-dd");date = sdf.format(new java.util.Date());//System.out.println(date);new Thread(new Runnable() {              @Override              public void run() {                  Bitmap bmp = getURLimage(url + date + ".jpg");                  Message msg = new Message();                  msg.what = 0;                  msg.obj = bmp;                  handle.sendMessage(msg);              }          }).start();  Handler handler = new Handler();handler.postDelayed(new splashhandler(), 10000);}class splashhandler implements Runnable{            public void run() {              startActivity(new Intent(getApplication(),MainActivity.class));              Start.this.finish();          }  }//下載網狀圖片public Bitmap getURLimage(String url) {          Bitmap bmp = null;          try {              URL myurl = new URL(url);              // 獲得串連              HttpURLConnection conn = (HttpURLConnection) myurl.openConnection();              conn.setConnectTimeout(6000);//設定逾時              conn.setDoInput(true);              conn.setUseCaches(false);//不緩衝              conn.connect();              InputStream is = conn.getInputStream();//獲得圖片的資料流              bmp = BitmapFactory.decodeStream(is);              is.close();          } catch (Exception e) {              e.printStackTrace();          }          return bmp;      }  }


單詞查詢介面:


public class DictFragment extends Fragment {MediaPlayer mediaPlayer;private View view;// private TextView tvUs;// private TextView tvUk;private ImageButton Ibtnbook;private Button btnSrarch;private Button btnClear;private EditText etInput;private WebView wvShow;private InputMethodManager imm;private Spinner spinner;private String dictName;private String basicMeaning;private ArrayAdapter<String> adapter;private final String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + "/Mdict";private final String DATABASE_FILENAME = "dict.db";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/css/style.css\" type=\"text/css\">";private static final String body = "<html><head>" + linkCss+ "</head><body class=\"p-dict\" style=\"height: 591px;\">";@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {view = inflater.inflate(R.layout.dict_fragment, container, false);InitViews();setListener();// 內部開啟串連wvShow.setWebViewClient(new WebViewClient() {public boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}});// 滾動欄wvShow.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);return view;}// 初始化public void InitViews() {btnSrarch = (Button) view.findViewById(R.id.btnSearch);btnClear = (Button) view.findViewById(R.id.btnClear);etInput = (EditText) view.findViewById(R.id.etInput);wvShow = (WebView) view.findViewById(R.id.wvShow);// tvUs = (TextView) view.findViewById(R.id.tvUs);// tvUk = (TextView) view.findViewById(R.id.tvUk);Ibtnbook = (ImageButton) view.findViewById(R.id.Ibtnbook);wvShow.getSettings().setDefaultTextEncodingName("UTF-8");spinner = (Spinner) view.findViewById(R.id.sp);adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_spinner_item, dict);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);spinner.setAdapter(adapter);spinner.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view,int position, long id) {dictName = adapter.getItem(position);}@Overridepublic void onNothingSelected(AdapterView<?

> parent) {dictName = dict[0];}});}public void setListener() // 設定監聽器{Ibtnbook.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String databaseFilename = DATABASE_PATH + "/"+ DATABASE_FILENAME;SQLiteDatabase db = getActivity().openOrCreateDatabase(databaseFilename, Context.MODE_PRIVATE, null);Cursor cs = db.rawQuery("select * from wordbook where word=?

",new String[] { etInput.getText().toString().trim() });if (cs.moveToFirst()) {Toast.makeText(getActivity(), "已經存在", Toast.LENGTH_SHORT).show();} else {db.execSQL("insert into wordbook(word,meaning) values(?

,?)",new Object[] { etInput.getText().toString().trim(),basicMeaning });Toast.makeText(getActivity(), "已經加入", Toast.LENGTH_SHORT).show();}db.close();}});// 鍵盤監聽etInput.setOnKeyListener(new OnKeyListener() {@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_ENTER) {new Thread(new Runnable() {@Overridepublic void run() {Search();}}).start();wvShow.setFocusable(true);wvShow.setFocusableInTouchMode(true);wvShow.requestFocus();}return false;}});// 搜尋button監聽btnSrarch.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String word = etInput.getText().toString();word = word.trim();if (word.length() == 0) {Toast.makeText(getActivity(), "查詢內容為空白", 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);new Thread(new Runnable() {@Overridepublic void run() {Search();}}).start();wvShow.setFocusable(true);wvShow.setFocusableInTouchMode(true);wvShow.requestFocus();}}});// 清除button監聽btnClear.setOnClickListener(new OnClickListener() {@Overridepublic 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;}}}public void Search() {selectDict();// 軟鍵盤開啟則關閉。關閉則開啟imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);if (imm.isActive()) {imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,InputMethodManager.HIDE_NOT_ALWAYS);}if (dictName == "ec") { // 基本釋義使用另外的介面basicMeaning = "";String word = etInput.getText().toString().trim();StringBuffer buffer = new StringBuffer();buffer.append("<html><head></head><body>");GetStringFromWeb json = new GetStringFromWeb();try {json.setJson(word, "", 3);JSONObject jsonObject = new JSONObject(json.getJson());JSONObject basic = jsonObject.getJSONObject("basic");// tvUs.setText("美:[" + basic.getString("us-phonetic") + "]");// tvUk.setText("英:[" + basic.getString("uk-phonetic") + "]");buffer.append("美:[" + basic.getString("us-phonetic") + "]");buffer.append("英:[" + basic.getString("uk-phonetic") + "]");JSONArray explains = basic.getJSONArray("explains");// System.out.println("here");for (int i = 0; i < explains.length(); i++) {buffer.append(explains.getString(i) + "<br>");basicMeaning += explains.getString(i);}buffer.append("</body></html>");wvShow.loadDataWithBaseURL("", buffer.toString(), "text/html","UTF-8", "");} catch (Exception e) {e.printStackTrace();}} else {GetStringFromWeb json = new GetStringFromWeb();String word = etInput.getText().toString().trim();try {json.setJson(word, dictName, 2);String html = body + "<div id=\"" + dictName + "\" "+ "class=\"trans-container " + dictName + "\">"+ json.getJson() + "</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) {e.printStackTrace();}}}}



DescriptionCode翻譯介面:



public class TransFragment extends Fragment {private InputMethodManager imm;private EditText etSentence;private TextView tvSentence;private Button btnDel;private Button btnTrans;private View view;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {view = inflater.inflate(R.layout.trans_fragment, container, false);InitViews();setListener();return view;}public void InitViews() {etSentence = (EditText) view.findViewById(R.id.etSentence);tvSentence = (TextView) view.findViewById(R.id.tvSentence);btnTrans = (Button) view.findViewById(R.id.btnTrans);btnDel = (Button) view.findViewById(R.id.btnDel);}public void setListener() {btnTrans.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnew Thread(new Runnable() {@Overridepublic void run() {Research();}}).start();etSentence.setFocusable(true);etSentence.setFocusableInTouchMode(true);etSentence.requestFocus();}});btnDel.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubetSentence.setText("");etSentence.setFocusable(true);etSentence.setFocusableInTouchMode(true);etSentence.requestFocus();}});etSentence.setOnKeyListener(new OnKeyListener() {@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_ENTER) {new Thread(new Runnable() {@Overridepublic void run() {Research();}}).start();etSentence.setFocusable(true);etSentence.setFocusableInTouchMode(true);etSentence.requestFocus();}return false;}});}public void Research() {imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);if (imm.isActive()) {imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,InputMethodManager.HIDE_NOT_ALWAYS);}GetStringFromWeb json = new GetStringFromWeb();try {String word = etSentence.getText().toString().trim();json.setJson(word, "", 1);JSONObject jsonObject = new JSONObject(json.getJson());JSONArray transResult = jsonObject.getJSONArray("trans_result");String dst = "";for (int i = 0; i < transResult.length(); i++) {JSONObject jsons = (JSONObject) transResult.get(i);dst += jsons.getString("dst");}tvSentence.setText(dst);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}


源檔案下載:http://pan.baidu.com/s/1m9P3w


使用Android簡單實現有道電子詞典

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.