Android-Navigation篇(一)

今天學習Android的navigation

github地址 https://github.com/Eric-Han0521/NavigationExamplesTest.git

導航是指支持用戶導航多望、進入和退出應用中不同內容片段的交互。Android Jetpack 的導航組件可幫助您實現導航氢烘,無論是簡單的按鈕點擊怀偷,還是應用欄和抽屜式導航欄等更為復雜的模式,該組件均可應對播玖。導航組件還通過遵循一套既定的規(guī)則來確保一致且可預測的用戶體驗椎工。

導航組件由以下三個關鍵部分組成:

導航圖:在一個集中位置包含所有導航相關信息的 XML 資源。這包括應用內所有單個內容區(qū)域(稱為目標)以及用戶可以通過應用獲取的可能路徑蜀踏。

NavHost:顯示導航圖中目標的空白容器维蒙。導航組件包含一個默認 NavHost 實現 (NavHostFragment),可顯示 Fragment 目標果覆。

NavController:在 NavHost 中管理應用導航的對象颅痊。當用戶在整個應用中移動時,NavController 會安排 NavHost 中目標內容的交換随静。

在應用中導航時八千,您告訴 NavController,您想沿導航圖中的特定路徑導航至特定目標燎猛,或直接導航至特定目標恋捆。NavController 便會在 NavHost 中顯示相應目標。

導航組件提供各種其他優(yōu)勢重绷,包括以下內容:

處理 Fragment 事務沸停。

默認情況下媚媒,正確處理往返操作宴凉。

為動畫和轉換提供標準化資源砍濒。

實現和處理深層鏈接翠储。

包括導航界面模式(例如抽屜式導航欄和底部導航),用戶只需完成極少的額外工作假颇。

Safe Args - 可在目標之間導航和傳遞數據時提供類型安全的 Gradle 插件次慢。

ViewModel 支持 - 您可以將 ViewModel 的范圍限定為導航圖岩馍,以在圖表的目標之間共享與界面相關的數據倒淫。

此外伙菊,您還可以使用 Android Studio 的 Navigation Editor 來查看和編輯導航圖。

Android developer官網復制,手動狗牌

依賴導入鏈接 https://developer.android.google.cn/guide/navigation/navigation-getting-started


本篇設計主題包括Create destinations镜硕,Design navigation graphs运翼,Global actions,Navigate to a destination兴枯,Conditional navigation血淌,Pass data between destinations,Animate transitions between destinations

在創(chuàng)建項目之前po出完成的項目結構财剖,以供參考

image

首先創(chuàng)建一個Android project悠夯,并把項目名定義的特別長顯的高級

image

然后接入正題
首先我們需要準備6個fragment備用,并在對應的布局文件中創(chuàng)建各種組件峰伙,布局文件代碼詳見github地址

step one

然后取消選擇如下的兩個框框疗疟,因為我們暫時用不到

step two

定義好6個fragment后我們創(chuàng)建我們的主角navigation graphs

step three

然后在我們的activity_main.xml文件中創(chuàng)建一個fragment,并添加

android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph" 

別忘了設置fragment的id
然后在我們的nav_graph中將事先準備好的6個fragment添加進去

step four

雖然有位偉大的課程老師和我們說過圖形界面都是歪門左道瞳氓,但是就是好用,哈哈哈哈哈

這里注意fragment添加的順序栓袖,首次被添加的會默認成為startDestination匣摘,也可以在nav_graph中設置startDestination

然后我們點擊框框邊的圓點進行拖拖拽拽,確定fragment的顯示先后順序

這時候我們可以看到nav_graph中出現密密麻麻的代碼裹刮,著重注意action音榜,我們很多屬性都需要在這里面設置

接下來我們我們在java文件中對布局文件中的組件進行注冊和跳轉控制,我們以MainFragment為例捧弃,在java文件中注入一下代碼

step five

照貓畫虎赠叼,其他的幾個fragment的也按照這種方式去編輯

到這里我們有了一個可以運行的小項目了


接下來我們就可以在destination之間定義動畫了

動畫的定義其實很簡單,我們首先需要定義四個不同狀態(tài)的動畫违霞,分別為slide_in_left嘴办,slide_in_right,slide_out_left买鸽,slide_out_right涧郊,顧名思義分別是左側滑進,右側滑進眼五,左側滑出與右側滑出妆艘。然后我們在nav_graph中的action中引用這些

step six

這樣我們destination之間的跳轉動畫也就做好了
以上圖的mianFragment和viewTransactionFragment為例,講解一下這四種屬性的區(qū)別

上圖我們知道看幼,這是mainFragment 跳轉到 viewTransactionFragment批旺,
app:enterAnim 是這個action的destination進入的動畫,是viewTransactionFragment的入場動畫
app:exitAnim 是這個action所在元素離開的動畫诵姜,是mainFragment的離場動畫
app:popEnterAnim 是action所在元素的入場動畫汽煮,即按下返回按鈕,destination出棧,mainFragment的入場動畫
app:popExitAnim 是destination出棧時離開的動畫逗物,即viewTransactionFragment的離場動畫


接下來我們進行fragment之間的通信

我們需要在fragment中定義argument來聲明要通信的關鍵字


step seven

如上圖所示搬卒,我們聲明了一個名為recipient的argument,初始值為None翎卓,我們只需要在準備跳轉到該destination的fragment的java文件中定義一個bundle契邀,并將bundle放入navController.navigate方法中即可

Bundle bundle = new Bundle();
bundle.putString("recipient",textInputEditText.getText().toString());
navController.navigate(R.id.action_chooseRecipientFragment_to_specifyAmountFragment,bundle);

然后我們在destination對應的java文件中調用getArguments().getString("recipient")就可以獲得上一個fragment傳過來的值


step eight

到這,navigation的入門基本屬于告一段落了
這就是這篇文章的全部內容了失暴,希望對大家有所幫助

祝程序員們多敲代碼坯门,少入坑,從此遠離ICU逗扒,拜拜

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末古戴,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子矩肩,更是在濱河造成了極大的恐慌现恼,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黍檩,死亡現場離奇詭異叉袍,居然都是意外死亡,警方通過查閱死者的電腦和手機刽酱,發(fā)現死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門喳逛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人棵里,你說我怎么就攤上這事润文。” “怎么了殿怜?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵典蝌,是天一觀的道長。 經常有香客問我稳捆,道長赠法,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任乔夯,我火速辦了婚禮砖织,結果婚禮上,老公的妹妹穿的比我還像新娘末荐。我一直安慰自己侧纯,他們只是感情好,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布甲脏。 她就那樣靜靜地躺著眶熬,像睡著了一般妹笆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上娜氏,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天拳缠,我揣著相機與錄音,去河邊找鬼贸弥。 笑死窟坐,一個胖子當著我的面吹牛,可吹牛的內容都是我干的绵疲。 我是一名探鬼主播哲鸳,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盔憨!你這毒婦竟也來了徙菠?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤郁岩,失蹤者是張志新(化名)和其女友劉穎婿奔,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體驯用,經...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡脸秽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了蝴乔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡驮樊,死狀恐怖薇正,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情囚衔,我是刑警寧澤挖腰,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站练湿,受9級特大地震影響猴仑,放射性物質發(fā)生泄漏。R本人自食惡果不足惜肥哎,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一辽俗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧篡诽,春花似錦崖飘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吊圾。三九已至,卻和暖如春翰蠢,著一層夾襖步出監(jiān)牢的瞬間项乒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工梁沧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留檀何,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓趁尼,卻偏偏與公主長得像埃碱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子酥泞,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內容