Android Studio实现记单词App,背完四六级一次过~

项目目录

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

一、项目概述

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

二、主要技术

主要应用的技术如下:

Fragment碎片ViewPagerSharedPreferencesMediaPlayer
Handler消息机制SQLiteDatabaseBundleListView
FileOutputStreamTimerMediaPlayerDialog

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

三、开发环境

开发环境依旧是在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<Word> CREATOR = new Parcelable.Creator<Word>() {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<Word> 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!

在这里插入图片描述

六、源码获取

♻️下面两种方式都可以获取源代码
1️⃣ 点击直接下载 Android Studio 记单词App
2️⃣关注公众号《 萌新加油站 》,后台回复: 单词

🚀这有你错过的精彩内容
Android Studio实现外卖订餐系统
Android Studio实现考试管理系统
Android Studio实现天气预报系统
Android Studio实现图书馆订座系统
Android Studio实现前后台分离的选课系统

功崇惟志,业广惟勤。——佚名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33556.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英语背单词秘籍

注:文章已于2021年2月4日更新。 文章目录 1. 大多数人背单词的现状2. 为什么不推荐使用现成的单词书3. 费曼学习法来帮助背单词1. 大多数人背单词的现状 背单词是大型考试中极为基础但却至关重要的一步。但很多同学都在此步中就踩了坑,比如买了一本厚厚的单词书开始背起,如…

安卓android记单词软件

课程设计项目总结,基于安卓的记单词软件,分为前端和服务器端,前端使用安卓,后端使用SSM框架。 具体技术栈为&#xff1a; 前端&#xff1a;android、okhttp、sqlite、litepal等 后端&#xff1a;SSM&#xff08;SpringMVCSpringMybatis&#xff09;、mysql数据库、tomcat服务器…

Python背单词记单词小程序,可自定义词库,支持多种记忆模式,根据词义拼写、选择单词,根据词意选择单词

Python背单词记单词小程序&#xff0c;可自定义词库&#xff0c;支持多种记忆模式&#xff0c;根据词义拼写、选择单词&#xff0c;根据词意选择单词&#xff0c;可乱序抽查&#xff0c;可对错题进行反复抽查 完整程序源代码下载&#xff1a;Python背单词记单词小程序 词库生成…

为了背单词,我花了两天写了一款背单词小程序

前言 “要是考试不考英语就好了” 哎&#xff0c;提起英语&#xff0c;都是伤心事。有时候严重怀疑自己不是一块学习英语的料。单词背了忘&#xff0c;忘了背&#xff0c;背了又忘。考试之前看啥单词都会&#xff0c;一上考场&#xff1a;这单词啥意思&#xff1f; …

大量背单词有用吗?

前言 从三年级开始接触英语&#xff0c;到今为止已经14年了&#xff0c;可是自己的英语水平虽不至于茫然无知&#xff0c;可是真正做到和老外进行交流&#xff0c;还是有一定的困难的。不仅是老外&#xff0c;和小伙伴进行topic的时候&#xff0c;也有卡壳的时候&#xff0c;类…

单词背记系统

题目 B4&#xff1a;基于关键词的文本排序检索系统 一、 课题内容和要求 题目 B4&#xff1a; &#xff08;一&#xff09;课题内容 “背单词—个性化背词”是背诵英语单词的软件。用户可以根据自己的需求 导入需背诵的词库&#xff0c;并可以编辑自己的词库。背单词时有两种…

背单词超实用的微信小程序来了

如果你还找不到快速背单词的工具&#xff0c;查询单词最便捷的工具&#xff0c;那你得赶紧了&#xff0c;自己独自开发到上线得微信小程序来了。

分享一款好用的电脑背单词软件

推荐一下这款单词风暴&#xff0c;虽然看起来很老了&#xff0c;但是好用&#xff0c;功能多。 下载地址 单词风暴免费版下载_官方免费版_单词风暴官方网站 (wordstorming.com) 下面是主界面 需要登陆ID:285804755-QGJTE-HCUMQ 下面是词库 不过我最喜欢的功能是这里面可以…

chatgpt赋能python:使用Python编写计算器

使用Python编写计算器 你是否曾经被手头上的计算器的功能所限制&#xff1f;或者需要一种高级计算器来解决你的问题&#xff1f;如果是这样的话&#xff0c;那么你可以使用Python编写一个自己的计算器。Python是一种功能强大而又容易入门的编程语言&#xff0c;可以用于各种各…

chatgpt赋能python:Python计算器代码实现——简单又实用

Python计算器代码实现——简单又实用 Python 作为一门高级编程语言&#xff0c;具有易读易写的特性&#xff0c;其语法简单&#xff0c;易于上手&#xff0c;受到越来越多的程序员和爱好者的喜欢。在Python中&#xff0c;实现计算器功能也是非常简单的一件事情。 为了方便大家…

chatgpt赋能python:Python计算器:简单易用的数学工具

Python计算器&#xff1a;简单易用的数学工具 作为一种脚本语言&#xff0c;Python被广泛用于数据分析、Web开发、机器学习等领域&#xff0c;它也是一款非常适合编写计算器的语言。Python计算器作为一款基于Python语言编写而成的数学工具&#xff0c;它不但可以快速进行各种基…

chatgpt赋能Python-python函数计算器

简介 Python是一种高级编程语言&#xff0c;它在数据科学和机器学习等领域非常流行。但是&#xff0c;很多人可能不知道它也可以用来编写简单的函数计算器。 在本文中&#xff0c;我们将介绍一些基本的Python函数&#xff0c;并教你如何使用它们来编写一个简单但强大的函数计…

chatgpt赋能python:Python计算器-让数学计算更简单

Python计算器- 让数学计算更简单 Python是一种广泛使用的编程语言&#xff0c;它有许多功能&#xff0c;从数据分析到人工智能应用。今天&#xff0c;我们来看看如何使用Python计算器来进行数学计算&#xff0c;这样你就可以处理复杂的数字问题并轻松地获得正确的结果。 Pyth…

chatgpt赋能python:Python简单计算器代码

Python简单计算器代码 Python是一种高级的编程语言&#xff0c;被广泛用于开发各种类型的应用程序&#xff0c;包括计算器应用程序。在本文中&#xff0c;我们将介绍Python简单计算器代码的实现和用法。 Python简单计算器代码介绍 一个简单的计算器能够实现基本的算术运算&a…

熵权法原理及应用

熵权法原理及应用 一、熵权法简述 熵&#xff1a;起源于物理学&#xff0c;表示物质微观热运动时的混乱程度&#xff0c;在信息论中是衡量系统无序程度度量值。 熵权法&#xff1a;根据信息熵的定义&#xff0c;对于某项指标&#xff0c;可以用熵值来判断某个指标的离散程度&…

微信常用接口

微信常用接口 一、公众号 1、准备工作 公众号的帐号及密码 公众号的AppID&#xff0c;AppSecret AppID&#xff1a; ​ 开发者ID是公众号开发识别码&#xff0c;配合开发者密码可调用公众号的接口能力。 AppSecret&#xff1a; ​ 开发者密码是校验公众号开发者身份的密码&a…

如何利用chatgpt进行深度学习

ChatGPT云炬学长 1 人赞同了该文章 我们都知道可以用chatgpt来进行学习&#xff0c;但是具体深入到某一个领域的时候&#xff0c;就会不知所措&#xff0c; 正所谓隔行如隔山&#xff0c; 在没有chatgpt之前&#xff0c;我认为入局某一个行业最好的办法就是知识付费&#x…

国内大模型争霸赛,你最看好哪家?这是你心目中的大模型排名吗?

知乎&#xff1a;绝密伏击地址&#xff1a;https://www.zhihu.com/question/598051793/answer/3034073973深度学习自然语言处理 分享 进NLP群—>加入NLP交流群 OpenAI Vs Google 目前大模型 top2 应该就是 OpenAI 的 GPT-4&#xff0c;以及谷歌的PALM-2。这两家公司早已布局…

OpenAI 创始人再签联名信,一句话声明简短有力AI或引发灭绝风险

作者 | 刘燕&#xff0c;核子可乐 全球 AI 大牛又签署一封公开信&#xff1a; AI 或将引发“灭绝风险” 本周二&#xff0c;人工智能安全中心&#xff08;CAIS&#xff09;发布了一份由 OpenAI 及 DeepMind 高管、图灵奖获得者及其他 AI 研究人员签署的简短声明&#xff0c…

大模型激战正酣,王坚能否带领阿里云王者归来?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 5月11日&#xff0c;有消息称&#xff0c;十年前卸任阿里云总裁的王坚&#xff0c;将于近日以全新职位&#xff0c;全职加入阿里云。公开资料显示&#xff0c;作为阿里云创始人&#xff0c;王坚在2009年创办阿里云&#xff…