0


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

项目目录

一、项目概述

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

二、主要技术

主要应用的技术如下:
Fragment碎片ViewPagerSharedPreferencesMediaPlayerHandler消息机制SQLiteDatabaseBundleListViewFileOutputStreamTimerMediaPlayerDialog
本项目知识点还是很多的,虽然看起来功能不算多,但是实现起来很不容易。

三、开发环境

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

在这里插入图片描述

四、详细设计

1、数据库

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

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

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

// 创建数据库和表privatevoidinitTable(){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=?;",newString[]{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(?,?,?);",newObject[]{i,0, metaKey});}}
         cursor.close();}}

2、单词详情

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

/**
 * 单词实体类
 */publicclassWordimplementsParcelable{//Word_Id, Word_Key, Word_Phono, Word_Trans, Word_Example, Word_Unit;privateint mId;privateString mKey;privateString mPhono;privateString mTrans;privateString mExample;privateint mUnit;publicWord(){}publicWord(int id,String key,String phono,String trans,String example,int unit){
        mId = id;
        mKey = key;
        mPhono = phono;
        mTrans = trans;
        mExample = example;
        mUnit = unit;}publicintgetId(){return mId;}publicvoidsetId(int id){
        mId = id;}publicStringgetKey(){return mKey;}publicvoidsetKey(String key){
        mKey = key;}publicStringgetPhono(){return mPhono;}publicvoidsetPhono(String phono){
        mPhono = phono;}publicStringgetTrans(){return mTrans;}publicvoidsetTrans(String trans){
        mTrans = trans;}publicStringgetExample(){return mExample;}publicvoidsetExample(String example){
        mExample = example;}publicintgetUnit(){return mUnit;}publicvoidsetUnit(int unit){
        mUnit = unit;}@OverridepublicintdescribeContents(){return0;}@OverridepublicvoidwriteToParcel(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);}protectedWord(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();}publicstaticfinalParcelable.Creator<Word>CREATOR=newParcelable.Creator<Word>(){publicWordcreateFromParcel(Parcel source){returnnewWord(source);}publicWord[]newArray(int size){returnnewWord[size];}};}

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

publicViewonCreateView(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);finalWord word =getArguments().getParcelable(Const.WORD_KEY);
    mImageView =(ImageView) view.findViewById(R.id.icon_speech);
    mImageView.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(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

方法获取数据源,并通知适配器更新数据源。

@OverridepublicbooleanonCreateOptionsMenu(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(newView.OnClickListener(){@OverridepublicvoidonClick(View v){
                mActionBar.setDisplayHomeAsUpEnabled(true);
                mWordDao =newWordDao(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);}returntrue;}
@OverridepublicbooleanonQueryTextChange(String newText){ArrayList<Word> words =null;if(!TextUtils.isEmpty(newText)){
         words = mWordDao.queryWords(mMetaKey, newText);}
     mSearchFgt.refresh(words);returntrue;}

五、运行演示

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

六、源码获取

关注公众号《萌新加油站》,后台回复:单词,即可获取完整源代码。


🚀这有你错过的精彩内容

  • ❤️Android Studio实现连连看小游戏❤️
  • ❤️Android Studio实现一个健身系统❤️
  • ❤️Android Stduio实现天气预报App❤️
  • ❤️Android Studio实现考试管理系统❤️
  • ❤️Android Studio实现小说阅读App❤️

也可以直接下载源代码:👉Android Studio实现记单词App👈


本文转载自: https://blog.csdn.net/qq_42257666/article/details/127910932
版权归原作者 振华OPPO 所有, 如有侵权,请联系我们删除。

“Android Studio实现记单词App,背完四六级一次过~”的评论:

还没有评论