BottomNavigationView使用,配合ViewPager、修改图标大小、去掉文字等

举报
yechaoa 发表于 2022/05/30 22:50:21 2022/05/30
【摘要】 目录 1、布局 2、常用属性 3、设置监听 4、默认选中 5、配合ViewPager 6、添加角标 7、修改图标大小 8、去除波纹效果 9、Github   MaterialDesign中的一个底部导航栏(默认高度56dp,菜单在3~5个),使用简单,自带动画   1、布局 <...

目录

1、布局

2、常用属性

3、设置监听

4、默认选中

5、配合ViewPager

6、添加角标

7、修改图标大小

8、去除波纹效果

9、Github


 

MaterialDesign中的一个底部导航栏(默认高度56dp,菜单在3~5个),使用简单,自带动画

 

1、布局


  
  1. <android.support.design.widget.BottomNavigationView
  2. android:id="@+id/navigation"
  3. android:layout_width="0dp"
  4. android:layout_height="wrap_content"
  5. android:layout_marginEnd="0dp"
  6. android:layout_marginStart="0dp"
  7. android:background="?android:attr/windowBackground"
  8. app:layout_constraintBottom_toBottomOf="parent"
  9. app:layout_constraintLeft_toLeftOf="parent"
  10. app:layout_constraintRight_toRightOf="parent"
  11. app:itemBackground="@color/colorPrimary"
  12. app:itemIconTint="@color/white"
  13. app:itemTextColor="@color/white"
  14. app:menu="@menu/navigation"/>

 

2、常用属性

app:itemBackground 背景颜色

app:itemIconTint 图标颜色

app:itemTextColor 文字颜色

app:menu 导航菜单

app:labelVisibilityMode 文字显示状态,等于labeled的时候,即使item大于3个也显示文字,unlabeled不显示文字,只有图片

 


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item
  4. android:id="@+id/navigation_home"
  5. android:icon="@drawable/ic_home_black_24dp"
  6. android:title="@string/title_home"/>
  7. <item
  8. android:id="@+id/navigation_dashboard"
  9. android:icon="@drawable/ic_dashboard_black_24dp"
  10. android:title="@string/title_dashboard"/>
  11. <item
  12. android:id="@+id/navigation_notifications"
  13. android:icon="@drawable/ic_notifications_black_24dp"
  14. android:title="@string/title_notifications"/>
  15. </menu>


图标可以直接在这里替换,对应icon

也可以是一个selector

 

3、设置监听


  
  1. private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
  2. = new BottomNavigationView.OnNavigationItemSelectedListener() {
  3. @Override
  4. public boolean onNavigationItemSelected(@NonNull MenuItem item) {
  5. switch (item.getItemId()) {
  6. case R.id.navigation_home:
  7. mTextMessage.setText(R.string.title_home);
  8. return true;
  9. case R.id.navigation_dashboard:
  10. mTextMessage.setText(R.string.title_dashboard);
  11. return true;
  12. case R.id.navigation_notifications:
  13. mTextMessage.setText(R.string.title_notifications);
  14. return true;
  15. case R.id.navigation_test:
  16. mTextMessage.setText(R.string.title_test);
  17. return true;
  18. }
  19. return false;
  20. }
  21. };

 

4、默认选中

 

mNavigation.getMenu().getItem(0).setChecked(true);
 

mNavigation.setSelectedItemId(R.id.navigation_dashboard);
 

 

5、配合ViewPager

布局:


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:id="@+id/container"
  6. android:layout_width="match_parent"
  7. android:orientation="vertical"
  8. android:layout_height="match_parent"
  9. tools:context="com.yechaoa.multipleitempage.MainActivity">
  10. <android.support.v4.view.ViewPager
  11. android:id="@+id/viewPager"
  12. android:layout_weight="1"
  13. android:layout_width="match_parent"
  14. android:layout_height="0dp" />
  15. <android.support.design.widget.BottomNavigationView
  16. android:id="@+id/navigation"
  17. android:layout_width="match_parent"
  18. android:layout_height="wrap_content"
  19. android:layout_marginTop="8dp"
  20. android:background="?android:attr/windowBackground"
  21. app:menu="@menu/navigation" />
  22. </LinearLayout>


添加Listener让二者关联起来

 


  
  1. mViewPager.addOnPageChangeListener(mOnPageChangeListener);
  2. mNavigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

  
  1. private ViewPager.OnPageChangeListener mOnPageChangeListener = new ViewPager.OnPageChangeListener() {
  2. @Override
  3. public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
  4. }
  5. @Override
  6. public void onPageSelected(int position) {
  7. mNavigation.getMenu().getItem(position).setChecked(true);
  8. }
  9. @Override
  10. public void onPageScrollStateChanged(int state) {
  11. }
  12. };
  13. private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
  14. = new BottomNavigationView.OnNavigationItemSelectedListener() {
  15. @Override
  16. public boolean onNavigationItemSelected(@NonNull MenuItem item) {
  17. switch (item.getItemId()) {
  18. case R.id.navigation_home:
  19. mViewPager.setCurrentItem(0);
  20. return true;
  21. case R.id.navigation_category:
  22. mViewPager.setCurrentItem(1);
  23. return true;
  24. case R.id.navigation_cart:
  25. mViewPager.setCurrentItem(2);
  26. return true;
  27. case R.id.navigation_my:
  28. mViewPager.setCurrentItem(3);
  29. return true;
  30. }
  31. return false;
  32. }
  33. };

 

ViewPager选中的时候让BottomNavigationView的item也选中,BottomNavigationView的item选中的时候让ViewPager切换page

 

6、添加角标

查看:BottomNavigationView添加角标(BadgeView)

 

7、修改图标大小

源码开放方法:


  
  1. /**
  2. * Set the size to provide for the menu item icons.
  3. *
  4. * <p>For best image resolution, use an icon with the same size set in this method.
  5. *
  6. * @param iconSize the size in pixels to provide for the menu item icons
  7. * @attr ref R.styleable#BottomNavigationView_itemIconSize
  8. */
  9. public void setItemIconSize(@Dimension int iconSize) {
  10. menuView.setItemIconSize(iconSize);
  11. }

比如:

navView.itemIconSize = DisplayUtil.dp2px(35f)
 

8、去除波纹效果

有博主提到设置itemBackground,但我试了没用。。

app:itemBackground="@null"
 

我目前简单粗暴的方案,设置波纹颜色和背景颜色一致,达到看不出的效果。。


  
  1. android:background="@color/white"
  2. app:itemRippleColor="@color/white"

 

9、Github

https://github.com/yechaoa/MaterialDesign

 

 

 

 

文章来源: blog.csdn.net,作者:yechaoa,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/yechaoa/article/details/78519516

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。