Android Studio实现记单词App,背完四六级一次过~
创始人
2024-04-09 13:36:11
0

项目目录

  • 一、项目概述
  • 二、主要技术
  • 三、开发环境
  • 四、详细设计
    • 1、数据库
    • 2、单词详情
    • 3、搜索单词
  • 五、运行演示

一、项目概述

本系统包含高考、四级、六级、托福和雅思词汇五个章节。每个章节分为多个单元,每个单元又包含上百个词汇。可以在单元列表查询单词,实时记录每个单元的阅读时间,点进单词详情页,有单词的拼写、音标、释义和例句,底部导航栏可以查看前一页和后一页,还可以进行自动播放,可以手动滑动页面,右上角可以设置播放速度。是一款很给力的记单词软件。

二、主要技术

主要应用的技术如下:

Fragment碎片ViewPagerSharedPreferencesMediaPlayerAdapter
Handler消息机制SQLiteDatabaseBundleSQLiteOpenHelperSharedPreferences
FileOutputStreamTimerMediaPlayerDialogListView

本项目知识点还是很多的,虽然看起来功能不算多,但是实现起来很不容易。

三、开发环境

开发环境依旧是在3.5.1上进行开发的,只要你的AS是近两年从官网下载的,都是可以满足的。

在这里插入图片描述

四、详细设计

1、数据库

本项目的数据库采用已有的单词数据库word.db文件,通过读文件的方式,从数据库中读取存储的单词数据。

public SQLiteDatabase getDatabase() {String path = mContext.getDir(Const.DB_DIR, Context.MODE_PRIVATE) + File.separator + Const.DB_NAME;return SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READWRITE);
}

与以往的数据库帮助类不同,这次并没有提前创建好数据库和表,而是在欢迎活动中调用构造函数进行创建,创建之后会自动执行建表语句。

  // 创建数据库和表private void initTable() {DBOpenHelper dbOpenHelper = DBOpenHelper.getInstance(this);SQLiteDatabase database = dbOpenHelper.getDatabase();database.execSQL("create table if not exists TABLE_UNIT (" +"Unit_Key integer not null," +"Unit_Time integer not null default 0," +"Cate_Key text references TABLE_META(Meta_Key)" +");");for (String metaKey : Const.META_KEYS) {Cursor cursor = database.rawQuery("select Meta_UnitCount from TABLE_META where Meta_Key=?;", new String[]{metaKey});if (cursor.moveToFirst()) {int count = cursor.getInt(cursor.getColumnIndex("Meta_UnitCount"));for (int i = 1; i <= count; i++) {database.execSQL("insert into TABLE_UNIT (Unit_Key,Unit_Time,Cate_Key) " +"values(?,?,?);", new Object[]{i, 0, metaKey});}}cursor.close();}}

2、单词详情

首先肯定创建单词和单元的实体类,其实就是数据表的结构。类的内容就是:类的属性、构造函数、get和set方法。

/*** 单词实体类*/
public class Word implements Parcelable {//Word_Id, Word_Key, Word_Phono, Word_Trans, Word_Example, Word_Unit;private int mId;private String mKey;private String mPhono;private String mTrans;private String mExample;private int mUnit;public Word() {}public Word(int id, String key, String phono, String trans, String example, int unit) {mId = id;mKey = key;mPhono = phono;mTrans = trans;mExample = example;mUnit = unit;}public int getId() {return mId;}public void setId(int id) {mId = id;}public String getKey() {return mKey;}public void setKey(String key) {mKey = key;}public String getPhono() {return mPhono;}public void setPhono(String phono) {mPhono = phono;}public String getTrans() {return mTrans;}public void setTrans(String trans) {mTrans = trans;}public String getExample() {return mExample;}public void setExample(String example) {mExample = example;}public int getUnit() {return mUnit;}public void setUnit(int unit) {mUnit = unit;}@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeInt(this.mId);dest.writeString(this.mKey);dest.writeString(this.mPhono);dest.writeString(this.mTrans);dest.writeString(this.mExample);dest.writeInt(this.mUnit);}protected Word(Parcel in) {this.mId = in.readInt();this.mKey = in.readString();this.mPhono = in.readString();this.mTrans = in.readString();this.mExample = in.readString();this.mUnit = in.readInt();}public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {public Word createFromParcel(Parcel source) {return new Word(source);}public Word[] newArray(int size) {return new Word[size];}};
}

单词详情包含单词的拼写、单词的音标、单词的释义和单词的例句,通过数据库方法获取到单词的这些信息,然后依次填入TextView中,具体实现起来肯定还有很多细节点。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_detail, container, false);TextView tvExample = (TextView) view.findViewById(R.id.tv_exam);TextView tvKey = (TextView) view.findViewById(R.id.tv_key);TextView tvPhono = (TextView) view.findViewById(R.id.tv_phono);TextView tvTrans = (TextView) view.findViewById(R.id.tv_trans);final Word word = getArguments().getParcelable(Const.WORD_KEY);mImageView = (ImageView) view.findViewById(R.id.icon_speech);mImageView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mOnSpeechListener != null) {mOnSpeechListener.speech(word);}}});if (word != null) {tvExample.setText(word.getExample());tvKey.setText(word.getKey());tvPhono.setText("[" + word.getPhono() + "]");tvTrans.setText(word.getTrans());}return view;
}

3、搜索单词

在点击搜索框时,定义了mSearchFgt,用mSearchFgt的fragment先替换UnitList的fragment,然后在检测搜索框中有内容时,通过onQueryTextChange方法获取数据源,并通知适配器更新数据源。

@Override
public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.menu_search, menu);MenuItem item = menu.findItem(R.id.menu_item_search);mSearchView = (SearchView) item.getActionView();if (mSearchView != null) {mSearchView.setInputType(InputType.TYPE_CLASS_TEXT);mSearchView.setOnSearchClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mActionBar.setDisplayHomeAsUpEnabled(true);mWordDao = new WordDao(UnitListActivity.this);FragmentTransaction transaction = mFragmentManager.beginTransaction();transaction.hide(mUnitListFgt);if (mSearchFgt == null) {mSearchFgt = SearchFgt.newInstance(mMetaKey);transaction.add(R.id.unit_content, mSearchFgt);} else {transaction.show(mSearchFgt);}transaction.commit();}});mSearchView.setQueryHint(getString(R.string.search_hint));mSearchView.setOnQueryTextListener(this);}return true;
}
 @Overridepublic boolean onQueryTextChange(String newText) {ArrayList words = null;if (!TextUtils.isEmpty(newText)) {words = mWordDao.queryWords(mMetaKey, newText);}mSearchFgt.refresh(words);return true;}

五、运行演示

1、启动程序,首先是1s的欢迎界面。

在这里插入图片描述

2、主界面包含五大模块,包含高考、四级、六级、托福、雅思五大章节词汇。

在这里插入图片描述
3、我们选择雅思模块,进入单元列表界面。

在这里插入图片描述

4、选择Unit1,进入单词列表界面。

在这里插入图片描述

5、点进任意一个单词,我选择从第一个单词开始背,发现是abandon放弃的意思。

在这里插入图片描述

6、点击底部导航栏的后退,提示“已经是第一页”。

在这里插入图片描述
7、点击前进,可以自动翻到下一页,看到了第二个单词,当然我们也可以用手指左右滑动。

在这里插入图片描述

8、点击播放,可以按照指定的速度自动切换页面。

在这里插入图片描述

9、点击右上角菜单按钮,选择速度。

在这里插入图片描述

10、返回到单元列表,可以看到累积阅读的时长,来制定合理学习方案。

在这里插入图片描述

11、右上角搜索栏中输入需要查找的单词,下面会显示符合搜索要求的单词,原理就是字符串匹配筛选。

在这里插入图片描述

12、可以看到我们找到了fresh这个单词,点击进入详情页面。退出程序需要双击两次退出键才会退出。

在这里插入图片描述

13、最后从六级词汇中选择一个单词送给大家,你们都要做自己生活的champion!

在这里插入图片描述

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...