[ Android ] 要如何在同一個Activity中替換不同的Toolbar??

在較為簡單的狀況下,Toolbar應該是固定不變的

但今天如果需要因應各種需求變換特定的Toolbar該怎麼辦?

例如Actvity中個別的Fragment需要特定的Toolbar設置

那應該就是 ViewStub 派上用場的時候了


文章僅作為個人參考用,內容跳過很多實作的細節

詳細的程式碼或者資料可以用 android ViewStub 等關鍵字進行搜尋



針對變換 Toolbar 的問題我思考好久

網路上似乎很少很少有針對這樣的問題進行講解或回答

(( 後來發現是我掉進了思考的泥沼當中 ))

我思考的方向是如何去改變 include 標籤中的 Layout 來源

似乎又沒有這樣的物件可以去控制它

或者是如何在程式碼當中去改變 Toolbar 當中的物件

但這樣又超~~~機~~~~麻煩......


後來我開始找尋第二個方案,也就是這篇的主角 ViewStub

Stub根據字典的意思是存根、票根或者菸蒂的意思 << 有根源的意義在裏頭吧?

ViewStub 的解釋網路上應該有很多詳細的文章可以參考

這邊也不多加說明,僅以簡單的使用方式為說明目的

------------------------------------------------------------------------------

狀況題開始

我有一個MainActivity

最上方有一個Toolbar

最下面有一個BottomNavigationView

BottomNavigationView裏頭有三個按鈕

這裡假定為 A、B與C

我希望的是當按下BottomNavigationView的按鈕時

上方的Toolbar可以依照按鈕進行替換

換成不同內容的Toolbar

------------------------------------------------------------------------------

首先在MainActivity的Layout當中新增三個 ViewStub

ViewStub在這個時候並沒有大小的設定

不管你怎麼設定它就是這樣而已

不開心的話可以自己花點時間試試或者看看其他文章

(( 這邊不解釋細微的調整,只解釋該怎麼實作功能而已 ))

三個ViewStub弄好之後再開三個新的 Layout xml檔案

裏頭將個別的Toolbar弄好

最後再到三個 ViewStub當中指定剛弄好的Layout檔案


回到MainActivity.java

這裡開始進行畫面的初始化工作


其中要注意的是

Toolbar 的初始化一定要在 ViewStub inflate 之後

(( 因為 ViewStub 要顯示的內容包含Toolbar ))

如果 View 沒有被 inflate 出來就直接對Toolbar進行操作

這樣是會有問題的

ViewStub 執行完 inflate 就可以開始設定 Toolbar 了


完成之後就可以進行操作 ViewStub 的動作了

使用其 setVisibility() 方法來設定是否顯示於畫面上

例如

        viewStubToolbar1.setVisibility(View.VISIBLE);
        viewStubToolbar2.setVisibility(View.GONE);
        viewStubToolbar3.setVisibility(View.GONE);

這樣就是顯示 Toolbar1 了


------------------------------------------------------------------------------

參考資料

Android Developers | ViewStub
-- https://developer.android.com/reference/android/view/ViewStub


Android Developers | Delayed Loading of Views
-- https://developer.android.com/training/improving-layouts/loading-ondemand


Android tutorial: Switching between Listview and Gridview in Android at runtime
-- https://www.youtube.com/watch?v=gonDFGLY0hU





沒有留言:

張貼留言

Layout疑難雜症筆記

 這裡記錄一些Layout時View元件比較特殊的狀況與處理方式,內容會陸續增加。