英语词典小程序

编程入门 行业动态 更新时间:2024-10-11 09:21:59

英语词典小<a href=https://www.elefans.com/category/jswz/34/1771429.html style=程序"/>

英语词典小程序

#内容简介
英语词典小程序,是通过打开数据库来查询单词,通过openDatabase()方法来实现,另外也可以使用openDatabase()方法来实现实现从res\raw目录复制数据库文件到/sdcard/dictionary目录中,复制数据实际上先读取,再写入数据的过程。把数据库复制到手机内存中,更方便数据的读取。

#效果图

##下载地址

#代码

分析:

activity_main.xml中主要定义了一个按钮,作用是查询单词事件处理,定义了一个TextView显示查询的结果,定义了一个AutoCompleteTextView组件,起到显示多个单词的效果。

##UI界面

###activity_main.xml

<RelativeLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/mainbg"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><AutoCompleteTextViewandroid:id="@+id/etWord"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:layout_marginTop="31dp"android:background="@android:drawable/edit_text"android:ems="10"android:hint="@string/searchHint"android:singleLine="true"android:textColor="#552006"android:textColorHint="#782f10" ></AutoCompleteTextView><Buttonandroid:id="@+id/btnSearch"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/etWord"android:layout_alignBottom="@+id/etWord"android:layout_marginLeft="16dp"android:layout_toRightOf="@+id/etWord"android:background="@drawable/ibsearchword"android:onClick="searchWord"android:text="@string/serachWord" /><TextViewandroid:id="@+id/tvSearchResult"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignLeft="@+id/etWord"android:layout_below="@+id/etWord"android:layout_marginTop="22dp"android:textSize="25sp"android:background="@drawable/bg_roundcorner"android:textAppearance="?android:attr/textAppearanceMedium" /></RelativeLayout>

分析:

word_list_item.xml中只是定义了一TextView组件,用来显示查询出来的多个单词

###word_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android=""android:id="@+id/tvWordItem"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center_vertical"android:minHeight="?android:attr/listPreferredItemHeight"android:paddingLeft="6dip"android:textAppearance="?android:attr/textAppearanceLarge"android:textColor="@color/gray" />

##类和方法

分析:

Dictionary.java调用activity_main.xml布局,进行事件处理,调用适配器,查询所要查询的单词。
###Dictionary.java

package com.bzu.gxs;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import com.bzu.gxs.dao.DictionaryAdapter;
import com.bzu.gxs.db.DBHelper;
import com.bzu.gxs.R;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.TextView;
public class Dictionary extends Activity implements OnClickListener,TextWatcher {private DBHelper dbHelper; // 用户输入文本框private AutoCompleteTextView word; // 定义数据库的名字private SQLiteDatabase database;private Button searchWord; // 搜索按钮private TextView showResult; // 用户显示查询结果@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new DBHelper(getBaseContext());// 打开数据库database = dbHelper.openDatabase();init();searchWord.setOnClickListener(this); // 绑定监听器word.addTextChangedListener(this); // 绑定文字改变监听器}public void init() {searchWord = (Button) findViewById(R.id.btnSearch);word = (AutoCompleteTextView) findViewById(R.id.etWord);showResult= (TextView) findViewById(R.id.tvSearchResult);}public void afterTextChanged(Editable s) {Cursor cursor = database.rawQuery("select english as _id from t_words where english like ?",new String[] { s.toString() + "%" });// 新建新的AdapterDictionaryAdapter dictionaryAdapter = new DictionaryAdapter(this,cursor, true);// 绑定适配器word.setAdapter(dictionaryAdapter);}public void beforeTextChanged(CharSequence s, int start, int count,int after) {}public void onTextChanged(CharSequence s, int start, int before, int count) {}public void onClick(View view) {// 查询指定的单词String sql = "select chinese from t_words where english=?";Cursor cursor = database.rawQuery(sql, new String[] { word.getText().toString() });String result = "查无该词"; // 如果查找单词,显示其中文的意思if (cursor.getCount() > 0) { cursor.moveToFirst(); // 须使用moveToFirst方法将记录指针移动到第1条记录的位置result = cursor.getString(cursor.getColumnIndex("chinese")).replace("&amp;", "&");}showResult.setText(word.getText() + "\n" + result.toString());// 将结果显示到TextView中}}

分析:

DictionaryAdapter.java是自定义的适配器,调用word_list_item.xml布局, 将单词信息显示到列表中,绑定选项到列表中,生成新的选项。
###DictionaryAdapter.java

package com.bzu.gxs.dao;
import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.TextView;
import com.bzu.gxs.R;public class DictionaryAdapter extends CursorAdapter {private LayoutInflater layoutInflater;@Overridepublic CharSequence convertToString(Cursor cursor) {return cursor == null ? "" : cursor.getString(cursor.getColumnIndex("_id"));}// 将单词信息显示到列表中private void setView(View view, Cursor cursor) {TextView tvWordItem = (TextView) view;tvWordItem.setText(cursor.getString(cursor.getColumnIndex("_id")));}// 绑定选项到列表中@Overridepublic void bindView(View view, Context context, Cursor cursor) {setView(view, cursor);}// 生成新的选项@Overridepublic View newView(Context context, Cursor cursor, ViewGroup parent) {View view = layoutInflater.inflate(R.layout.word_list_item, null);setView(view, cursor);return view;}public DictionaryAdapter(Context context, Cursor c, boolean autoRequery) {super(context, c, autoRequery);layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}
}

分析:

DBHelper.java数据库操作类,调用数据库,打开数据库,读取数据库中的数据,关闭数据库。通过InputStream输入流,获得封装dictionary.db文件的InputStream对象。
###DBHelper.java

package com.bzu.gxs.db;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import com.bzu.gxs.R;public class DBHelper {// 定义数据库的存放路径private final String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + "/dictionary";private final String DATABASE_FILENAME = "dictionary.db";private Context context;public DBHelper(Context context) {this.context = context;}public SQLiteDatabase openDatabase() {try {// 获得dictionary.db文件的绝对路径String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;File dir = new File(DATABASE_PATH);// 如果/sdcard/dictionary目录中存在,创建这个目录if (!dir.exists())dir.mkdir();if (!(new File(databaseFilename)).exists()) {// 获得封装dictionary.db文件的InputStream对象InputStream is = context.getResources().openRawResource(R.raw.dictionary);FileOutputStream fos = new FileOutputStream(databaseFilename);byte[] buffer = new byte[8192];int count = 0;// 开始复制dictionary.db文件while ((count = is.read(buffer)) > 0) {fos.write(buffer, 0, count);}// 关闭文件流fos.close();is.close();}// 打开/sdcard/dictionary目录中的dictionary.db文件SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);return database;} catch (Exception e) {}// 如果打开出错,则返回nullreturn null;}}

更多学习资讯,学习源码,请在耶宇星球领取

更多推荐

英语词典小程序

本文发布于:2024-02-07 05:07:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1753394.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:程序   英语词典

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!