iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 25
1
Mobile Development

iOS Developer Learning Android系列 第 25

iOS Developer Learning Android. Lesson 25 - ActionBar (就算沒有NavigationController還是要處理那條bar喔)

雖然Android沒有了NavigationController
但其實上面一直有一條東西
這東西在程式裡面叫ActionBar,但Android叫他AppBar

The app bar, also known as the action bar, is one of the most important design elements in your app's activities, because it provides a visual structure and interactive elements that are familiar to users.
Add the app bar

今天就談談這個ActionBar或叫AppBar的二三事(不要叫做foobar就好XD)

本日原本想做的效果


原本是想做成在Activiyt裡,可以動態切換原有的/客製的/隱藏
但後來發現做不到
下面娓娓道來

講解

  1. 先上一張網路上找到的圖,作者為SpicyBoyd,出處,如有侵權告知後立即移除
  2. 接著說明如果要改成客製ActionBar的步驟
    1. 把原本style.xml的DarkActionBar改成NoActionBar,此時App就不會有ActionBar了
    2. 設定ActionBar的layout,用ToolBar這個類別
    3. findviewbyID得到toolbar
    4. 在Activiyt裡把它setSupportActionBar
  3. 看起來很簡單,但我卻卡超久,因為:
    1. 叫setSupportActionBar吃的卻是一種叫做ToolBar的東西= =
      而且ToolBar還分兩種:舊的android.widget.Toolbar 跟 新的androidx.appcompat.widget.Toolbar
      (甚至還有一種android.support.v7.widget.Toolbar)
      舊ToolBar是對應到setActionBar這個方法。
      只要畫面/類別/方法,三個沒對好,就會閃退
      真心覺得這是開發Android的一大麻煩之一,以前iOS Cocoa framework是不會有這種讓人confuse的情況的⚠️⚠️⚠️,太亂了,就像Fragment也是很多種
    2. 我的認知一直以為ActionBar不是Activiyt上的東西(其實系統級的ActionBar真的不是),所以我把ActionBar的layout獨立做成一個xml,但是卻忽略網路上教的都是findviewbyID,導致取到的都是null
    3. 如果沒有改成NoActionBar,系統級的ActionBar還在,你setSupportActionBar,他又給你看
  4. 其他發現
    1. 既然要客製ActionBar就要畫在畫面上,那還setSupportActionBar幹嘛?經實驗發現:
      1. ActionBar就會顯示Activity Title
      2. 就可以使用一些getSupportActionBar().show(), getSupportActionBar().setHomeButtonEnabled等方法...
        不然NoActionBar讓getSupportActionBar()變成得到null,call了可是又會崩潰的了呢(⚠️⚠️⚠️不像iOS可以請nil呼叫方法)
    2. getSupportActionBar()拿到的型別是就真的是ActionBar了,但也因此你不能塞回去setSupportActionBar裡面...
    3. 所以為什麼畫面上想做的事做不到?因為又有預設的ActionBar又要客製,是互斥的,除非你不想setSupportActionBar
    4. 結論:原來客製ActionBar就是一個view而已,有點失望...

參考資料

今天的範例程式

可以去 https://github.com/mark33699/IDLA 看一下順便給顆⭐️


如果你喜歡我的影片別忘了按讚分享加訂閱,開啟紅色的小鈴鐺,我們明天見~


上一篇
iOS Developer Learning Android. Lesson 24 - Room (不好的老師帶你住套房)
下一篇
iOS Developer Learning Android. Lesson 26 - FCM Notification (Service & BroadcastReceiver)
系列文
iOS Developer Learning Android30

尚未有邦友留言

立即登入留言