日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Studio实现一个小说阅读App

發(fā)布時間:2023/12/31 Android 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Studio实现一个小说阅读App 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

應(yīng)用目錄

  • 一、基本信息
  • 二、功能介紹
      • 1. 主界面
      • 2. 排行榜界面
      • 3. 分類界面
      • 4. 搜索界面
      • 5. 書籍詳情界面
      • 6. 閱讀界面
      • 7. 相關(guān)書籍界面
  • 三、類圖/時序圖/架構(gòu)圖
  • 四、采用技術(shù)及原因
      • 1.ViewPager+Fragment的使用
      • 2.RadioGroup實現(xiàn)導(dǎo)航欄
      • 3.Retrofit的網(wǎng)絡(luò)加載框架
      • 4.設(shè)置同步變量控制線程順序
      • 5.將多個列表放在一個activity下
      • 6.系統(tǒng)廣播獲取系統(tǒng)電量和時間
      • 7.非注銷生命周期的橫豎屏切換
  • 五、應(yīng)用部署
  • 六、運行截圖
  • 七、源碼獲取

一、基本信息

本次用java語言實現(xiàn)的Android小說閱讀App功能非常豐富,可以在線閱讀網(wǎng)絡(luò)書籍,也可以加入書架,還可以在線搜索網(wǎng)絡(luò)小說,有大家都在搜的關(guān)鍵詞推薦、關(guān)鍵詞刷新功能、搜索歷史等。根據(jù)男生和女生用戶的使用情況,分別顯示對應(yīng)的小說排行榜,包括:最熱榜、熱搜榜、潛力榜、留存榜和完結(jié)榜,點進(jìn)排行榜,還分為周榜、月榜和總榜。在分類中,有玄幻、武俠、歷史、科幻等多種類別,點進(jìn)某一類別,還有熱門、新書、好評和完結(jié)頂部導(dǎo)航欄。在閱讀小說時,可以切換日夜模式,橫豎屏切換,可以設(shè)置字體大小,還可以查看目錄。

二、功能介紹

1. 主界面

  • 點擊下方圖標(biāo)或左右滑動來切換書架、排行榜、分類,點擊右上角搜索圖標(biāo)進(jìn)入搜索界面
  • 從書架點擊某本書籍進(jìn)入閱讀界面
  • 在排行榜處點擊左上角♂/♀圖標(biāo)切換男生/女生,點擊某個排行榜進(jìn)入排行榜界面
  • 在分類處點擊上方按鈕切換男生/女生,點擊某個分類進(jìn)入分類界面

2. 排行榜界面

  • 點擊上方按鈕切換周榜/月榜/總榜
  • 點擊某本書籍進(jìn)入書籍詳情界面

3. 分類界面

  • 點擊上方按鈕切換熱門/新書/好評/完結(jié)
  • 點擊某本書籍進(jìn)入書籍詳情界面

4. 搜索界面

  • 在上方搜索框中輸入書名,點擊搜索按鈕進(jìn)行搜索
  • 點擊搜索結(jié)果中的書名跳轉(zhuǎn)到書籍詳情界面
  • 點擊“大家都在搜”/“搜索歷史”中的書名直接跳轉(zhuǎn)到書籍詳情界面

5. 書籍詳情界面

  • 點擊左下角“加入書架”按鈕可將當(dāng)前書籍加入書架
  • 點擊右下角“免費閱讀”按鈕跳轉(zhuǎn)到閱讀界面
  • 點擊“同類推薦”中的書籍可跳轉(zhuǎn)到該書籍的詳情界面
  • 點擊“更多”按鈕跳轉(zhuǎn)到相關(guān)書籍界面

6. 閱讀界面

  • 上下滑動進(jìn)行閱讀,左右滑動切換章節(jié)
  • 點擊屏幕中部,屏幕底部出現(xiàn)菜單:夜間/日間、橫屏/豎屏、設(shè)置、目錄
  • 點擊“夜間/日間”切換到夜間/日間模式
  • 點擊“橫屏/豎屏”切換到橫屏/豎屏模式
  • 點擊“設(shè)置”出現(xiàn)字體大小調(diào)整界面,點擊“A-”減小字體大小,點擊“A+”增大字體大小,點擊屏幕其他部分返回
  • 點擊“目錄”出現(xiàn)書籍目錄,點擊某個章節(jié)可跳轉(zhuǎn)到該章節(jié),點擊屏幕其他部分返回

7. 相關(guān)書籍界面

  • 點擊相關(guān)書籍列表中的書籍,跳轉(zhuǎn)到該書籍的詳情界面

三、類圖/時序圖/架構(gòu)圖

項目結(jié)構(gòu)圖如下,代碼一共分為6個部分,根據(jù)包名來分別介紹主要功能。

  • Activity:該app中用到的所有activity。
  • 2.DataBase:創(chuàng)建、操作數(shù)據(jù)庫和表的函數(shù)。

  • Fragment:在活動內(nèi)顯示的碎片,小型activity。
  • Object:包含各種api返回對象類和數(shù)據(jù)庫對象類。

  • 5. RecycleView:包含和recylerview相關(guān)的類、適配器和基礎(chǔ)的viewholder。

  • Service:包含api服務(wù)相關(guān)函數(shù)。
  • 四、采用技術(shù)及原因

    1.ViewPager+Fragment的使用

    原因

    每一個Fragment對應(yīng)一個界面,使用此技術(shù)來顯示界面,能夠更流暢地在各個界面之間完成切換,比如主界面的書架、排行榜、分類就是利用3個Fragment來顯示的,再增加RadioGroup作為導(dǎo)航欄,就能夠?qū)崿F(xiàn)類似于微信主界面一樣的效果了,各個界面之間切換流暢,具有美感

    方法

    使用的方法就是在布局中添加ViewPager:

    <android.support.v4.view.ViewPagerandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:overScrollMode="never"android:scrollbars="none"/>

    再在Activity中設(shè)置Adapter、FragmentList:

    private ViewPager viewPager; private List<Fragment> fragmentList = new ArrayList<>(); private TabFragmentStatePagerAdapter fragmentPagerAdapter;//初始化Fragment //... fragmentList.add(bookShelfFragment); fragmentList.add(rankingFragment); fragmentList.add(categoryFragment);

    設(shè)置ViewPager:

    viewPager.setOnPageChangeListener(new MyPagerChangeListener()); fragmentPagerAdapter = new TabFragmentStatePagerAdapter(getSupportFragmentManager(), fragmentList); viewPager.setAdapter(fragmentPagerAdapter); viewPager.setCurrentItem(0); viewPager.setOffscreenPageLimit(2);

    2.RadioGroup實現(xiàn)導(dǎo)航欄

    原因

    只有單純的滑動切換Fragment給用戶的提示信息還不夠,界面也不夠美觀,Fragment的分離也不夠明顯。實現(xiàn)一個導(dǎo)航欄能夠讓用戶明確每一個Fragment的作用。這也是當(dāng)前許多主流App的做法。

    方法

    利用RadioButton的android:button="@null"這個屬性來把圓形按鈕去掉,再利用android:drawableTop="@mipmap/bookshelf"屬性來給RadioButton顯示不同的圖片:

    <RadioButtonstyle="@style/BottomRB"android:drawableTop="@mipmap/bookshelf"/> <style name="BottomRB"><item name="android:button">@null</item><item name="android:textColor">@drawable/selector_tab_text_color</item> </style>

    在RadioButton被選中時,還需要設(shè)置字體的顏色以及改變圖片顏色,以達(dá)到被選中的效果。這可以在RadioGroup的監(jiān)聽事件中來實現(xiàn),注意需要設(shè)置圖片的大小,否則會不適配,設(shè)置的方法為:

    RadioButton的選中與ViewPager切換幀需要結(jié)合起來,才能達(dá)到導(dǎo)航欄的效果。

    在切換選中的RadioButton時,要修改ViewPager當(dāng)前顯示的幀;在切換ViewPager顯示的幀時,要修改被選中的RadioButton。

    3.Retrofit的網(wǎng)絡(luò)加載框架

    其底層使用OKHttp封裝,支持rxjava
    原因

    • 解耦,減少API接口定義和API接口使用的耦合
    • 包含許多注解,簡化代碼,方便使用
    • 支持同步、異步、RxJava
    • 可以使用不同工具解析數(shù)據(jù),如json、xml
    • 請求速度快

    方法

    接口類:

    @GET("/ranking/gender") Call<AllRankingObj> getAllRanking(); OkHttpClient build = new OkHttpClient.Builder().connectTimeout(2, TimeUnit.SECONDS).readTimeout(2, TimeUnit.SECONDS).writeTimeout(2, TimeUnit.SECONDS).build();// 用于API訪問 Retrofit retrofitForApi = new Retrofit.Builder().baseUrl(ApiUrl)// 設(shè)置json數(shù)據(jù)解析器.addConverterFactory(GsonConverterFactory.create())// RxJava封裝OkHttp的Call函數(shù),本質(zhì)還是利用OkHttp請求數(shù)據(jù).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).client(build).build();

    4.設(shè)置同步變量控制線程順序

    原因

    當(dāng)輸入速度特別快時,有的線程清空了list,而有的線程正在調(diào)用list里的元素,這樣會發(fā)生訪問異常,需要設(shè)置同步變量使得同一時刻只有一個線程在運行。

    方法

    flag = true; //用于同步問題的布爾變量 if (!s.equals("") && flag) {new Thread(new Runnable() {@Overridepublic void run() {flag = false;...}} }

    5.將多個列表放在一個activity下

    原因

    將不同列表放入多個activity里可以使得界面布局簡單,但是帶來的問題是需要增加許多activity之間的通信,增加了跳轉(zhuǎn)的復(fù)雜度,而將列表放入同一個activity里方便跳轉(zhuǎn)時的信息傳遞。

    方法

    //設(shè)置可見 if (!isSubmit) {if (s.equals("")) {initialLayout.setVisibility(View.VISIBLE);searchLayout.setVisibility(View.GONE);}else {initialLayout.setVisibility(View.GONE);searchLayout.setVisibility(View.VISIBLE);fuzzyList.setVisibility(View.VISIBLE);resultList.setVisibility(View.GONE);} }

    6.系統(tǒng)廣播獲取系統(tǒng)電量和時間

    原因

    用戶進(jìn)入閱讀界面時是全屏閱讀,頂部狀態(tài)欄會消失,那么需要有個信息欄來簡要顯示系統(tǒng)電量和時間

    方法

  • onCreate 中注冊廣播,接受電量和時鐘變化,并創(chuàng)建自定義的廣播接收者M(jìn)yReceiver類來處理訂閱
  • //注冊廣播接受者java代碼 intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); // 電量變化廣播 intentFilter.addAction(ACTION_TIME_TICK); //創(chuàng)建廣播接受者對象 myReceiver = new MyReceiver(); //注冊receiver registerReceiver(myReceiver, intentFilter);
  • 自定義廣播接收者類,處理電量和時鐘變化廣播
  • class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if(Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())){//獲取當(dāng)前電量int level = intent.getIntExtra("level", 0);//電量的總刻度int scale = intent.getIntExtra("scale", 100);//把它轉(zhuǎn)成百分比int percent = level*100/scale;// TODO: Do Something when battery_changed}else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) {// TODO:Do Something when time_tick}} }
  • onDestroy 中注銷廣播訂閱
  • unregisterReceiver(myReceiver);

    7.非注銷生命周期的橫豎屏切換

    原因

  • 小說閱讀需要適應(yīng)用戶閱讀習(xí)慣,有時候用戶需要橫屏閱讀,因此需要實現(xiàn)閱讀界面橫豎屏模式切換
  • 如果不設(shè)置上面第1步的代碼,那么橫豎屏切換會重新注銷Activity,即結(jié)束當(dāng)前活動的生命周期并重新開啟一個新的聲明周期。這樣不僅需要時間重新進(jìn)行網(wǎng)絡(luò)訪問獲取小說章節(jié)內(nèi)容,而且會影響到用戶的使用體驗。
  • 方法

  • 在AndroidManifest.xml 中對Activity 設(shè)置屬性(關(guān)鍵)
  • android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="portrait"
  • 橫豎屏切換后臺java代碼
  • 切換到橫屏

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    切換到豎屏

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    五、應(yīng)用部署

    下載好源代碼之后,通過android studio部署到手機(jī)或模擬器即可,或直接安裝report目錄下的apk文件。對android studio版本沒有具體要求。

    注:應(yīng)用開發(fā)測試環(huán)境的sdk版本最低為22,最高為28

    六、運行截圖

    1、運行項目,進(jìn)入主界面,顯示的是本地書架,此時我們已經(jīng)添加了四本書籍。

    2、第三本看完了,我們長按將它刪除。

    3、點擊右上角圖標(biāo),進(jìn)入搜索界面,輸入作者或者書名查找,底下是大家都在搜的關(guān)鍵詞,可以刷新。還有搜索歷史,可以刪除。

    4、進(jìn)入排行榜,可以選擇性別,然后查看各排行,比如最熱榜、完結(jié)榜。


    5、進(jìn)入具體的榜單后,頂部導(dǎo)航欄還分為周榜、月榜和總榜。


    6、點擊任意書籍,進(jìn)入詳情界面,有閱讀人次、留存率、簡介和同類推薦等。

    7、選擇加入書架,就將書籍放到了書架中。選擇免費閱讀,api當(dāng)前沒有該書的版權(quán),推薦我們直接下載軟件看小說。

    8、別著急退出,點擊屏幕中央,彈出底部功能菜單,可以設(shè)置日夜模式、很豎屏切換和字體大小。


    9、進(jìn)入分類導(dǎo)航欄,這里有幾百萬本書籍,真的看不過來了。

    10、點進(jìn)任意分類,會進(jìn)入具體分類界面,顯示頂部導(dǎo)航欄和書籍列表。


    11、回到書架導(dǎo)航欄,可以看到剛剛添加進(jìn)來的所有書籍。

    七、源碼獲取

    ??下面兩種方式都可以獲取源代碼
    1?? 點擊直接下載 Android Studio 小說閱讀App
    2??關(guān)注公眾號《 萌新加油站 》,后臺回復(fù): 小說

    🚀這有你錯過的精彩內(nèi)容
    Android Studio實現(xiàn)外賣訂餐系統(tǒng)
    Android Studio實現(xiàn)考試管理系統(tǒng)
    Android Studio實現(xiàn)天氣預(yù)報系統(tǒng)
    Android Studio實現(xiàn)圖書館訂座系統(tǒng)
    Android Studio實現(xiàn)前后臺分離的選課系統(tǒng)

    生命里最重要的事情是要有個遠(yuǎn)大的目標(biāo),并借助才能與堅持來完成它。——歌德

    總結(jié)

    以上是生活随笔為你收集整理的Android Studio实现一个小说阅读App的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。