介紹
BottomNavigationView是一個(gè)底部導(dǎo)航視圖擂煞,通過底部導(dǎo)航欄可以切換不同的視圖卤材。導(dǎo)航欄的內(nèi)容可以通過菜單資源文件填充,顯示菜單的文本和圖標(biāo)
使用
- 新建Fragment
先新建三個(gè)Fragment层亿,為后續(xù)導(dǎo)航欄切換切換做準(zhǔn)備寄纵,這里我新建了FirstFragment
、SecondFragment
和ThirdFragment
- 創(chuàng)建導(dǎo)航圖文件
因?yàn)轫撁媲袚Q要用到之前的Navigation癣籽,所以需要創(chuàng)建導(dǎo)航圖文件挽唉,并根據(jù)提示導(dǎo)入相關(guān)依賴
- 創(chuàng)建菜單資源文件
前面說過,底部導(dǎo)航欄的內(nèi)容可以通過菜單資源文件實(shí)現(xiàn)筷狼,所以創(chuàng)建一個(gè)菜單瓶籽,加入三個(gè)選項(xiàng)即可
這里要注意,菜單中的每個(gè)選項(xiàng)的id
必須要和導(dǎo)航圖中的每個(gè)fragment
對應(yīng)埂材,不然導(dǎo)航是不起作用的
- 添加
NavHostFragment
和BottomNavigationView
打開activity_main.xml
塑顺,在可視化界面的Containers中,把NavHostFragment
和BottomNavigationView
拖入到布局中
選中BottomNavigationView
俏险,在右側(cè)Common Atributes
中點(diǎn)擊menu
严拒,選擇剛剛創(chuàng)建的菜單資源文件
NavHostFragment
還是和之前一樣扬绪,選擇之前創(chuàng)建的導(dǎo)航圖資源文件
- 修改Activity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigationView);
NavController controller = Navigation.findNavController(this, R.id.fragment);
AppBarConfiguration configuration = new AppBarConfiguration.Builder(controller.getGraph()).build();
NavigationUI.setupActionBarWithNavController(this, controller, configuration);
NavigationUI.setupWithNavController(bottomNavigationView, controller);
}
}
這里可以看到有些部分和之前的Navigation Demo是不一樣的,以下是不同的部分:
實(shí)例化了BottomNavigationView
實(shí)例化了AppBarConfiguration
NavigationUI.setupActionBarWithNavController()
相比之前多傳入了一個(gè)configuration
參數(shù)多了一個(gè)設(shè)置
NavigationUI.setupWithNavController(bottomNavigationView, controller)
這樣就能夠?qū)崿F(xiàn)底部導(dǎo)航欄功能了
但是會有點(diǎn)瑕疵裤唠,就是當(dāng)我們切換到其他頁面的時(shí)候勒奇,左上角會出現(xiàn)一個(gè)返回箭頭,所以需要修改AppBarConfiguration
先看看AppBarConfiguration.Builder()
可以傳入的參數(shù):
歸類成三種方式:
controller.getGraph()
巧骚,但是會有返回圖標(biāo)bottomNavigationView.getMenu()
R.id.firstFragment, R.id.secondFragment, R.id.thirdFragment
這樣就能完美使用了