在較為簡單的狀況下,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
沒有留言:
張貼留言