Kotlin 開發第 8 天 BottomNavigation ( Fragment + Intent)

準備實現 iOS 上 UITabBarController + UINavigationController 的功能,這中搭配經常出現在各種類型的 App 上。

  • 三個 Tab 可以切換到不同的 Activity
  • HomeActivity 提供一個按鈕可以跳轉到 Home2Activity
  • Home2Activity 提供一個按鈕可以跳轉到 Home3Activity
  • Home3Activity 提供一個按鈕可以跳回 MainActivity
  • Toolbar 上有返回鍵,提供 Home3 -> Home2 -> Main 的返回功能。

Menu

我們建立檔案 res/menu/navigation.xml,定義三個可以點選的 Item。

為 Navigation 被 Click 的情況提供一個 Listener

在 Listener 中通過被 click 的 itemID 來判斷要切換到哪一個 Fragment


Fragment

通過 supportFragmentManager 來管理 Fragment

要切換 Fragment 需要幾個步驟(來自官方文件  in Java)

Kotlin 的例子


activity_main.xml

在 layout_main.xml 中引入 BottomNavigationView

其中我們通過下面的方法引入剛才定義好的 menu(我們在 menu 下,有建立一個 navigation 的文件,並且定義好了幾個 item)

幾個需要注意的地方

  • 默認高度是 54dp
  • icon 選中的顏色默認是 @color/colorPrimary
  • 文字默認顏色也是 @color/colorPrimary
  • 背景顏色默認是當前的樣式

顏色的部分可以直接在 <android.support.design.widget.BottomNavigationView /> 下修改

  • app:itemBackground=“@android:color/red”
  • app:itemIconTint=“@android:color/yellow”
  • app:itemTextColor=“@android:color/green”

Navigation 返回鍵

通過在 Activity 中加入

然後通過 override 方法來接收點擊情況

回到最初的 Activity

這裡和 iOS 的 UINavigationController 不太一樣。

通過給 Intent 加 Flag 的方式可以清除其他 Activity 跳到下一個 Activity 上。


Build.gradle

iOS 通過 CocoaPods 等工具進行依賴包管理而 Android 是通過 Gradle 而 Android 世界裡看起來連官方提供的一些 UI 控件 都會通過 Gradle 加載。

如果不是通過 IDE 來建立 BottomNavigationView,需要手動在 Build.gradle 中的 dependencies 增加依賴


Drawable 資料夾

如果是通過 new project 選擇 bottomNavigationView 的方式,會看到 IDE 幫我們在 Drawable 底下建立了幾個 icon。

比如 ic_dashboard_black_24dp.xml 文件通過 pathData 的方式把 icon 給畫了出來。


筆記

  • 問題:為什麼一定要在 res 下建立 menu 資料夾,而不能取其他名字,感覺是 Android 規定好的名稱?
  • TODO:TabLayout + Fragment / FragmentTabHost + Fragment / RadioGroup + RadioButton + Fragment / CustomTabView + Fragment
  • 問題:當我的 Activity 取名為 HomeDetailActivity 而 Layout 為 Activity_home_deail.xml 的時候,發現版面不見了…

參考

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *