Android流行UI布局 BottomNavigationView+ViewPager+Fragment的使用

来源:互联网 发布:义乌淘宝拍摄 编辑:程序博客网 时间:2024/04/27 16:12

1.概述

Android端采用底部导航栏的app非常多,一般我们都采用RadioGroup,RadiaButton来进行界面的切换。今天我们要讲的是一个新的控件BottomNavigationView,用于替换RadioGroup。这个控件位于support-design包下,是google25以上推出的新的一个控件。现在我们用BottomNavigationView+ViewPager+Fragment实现常用的导航功能。

最终实现效果:


2.实现过程

demo中写了两种切换的形式,一种是使用viewPager左右滑动切换fragment,一种是通过fragment的事务切换,直接就hide,show,就可以了,相信大家都会的。现在着重介绍viewPager+fragment配合BottomNavigationView这种形式。


首先要在工程中引入design包

compile 'com.android.support:design:26.0.0-alpha1'
一定要是25以上才起作用。

下面看一下布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.ren.bottomnavigationview.activity.Main2Activity">    <android.support.v4.view.ViewPager        android:id="@+id/viewPager"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:overScrollMode="never"        android:scrollbars="none">    </android.support.v4.view.ViewPager>    <android.support.design.widget.BottomNavigationView        android:id="@+id/bottom_view"        android:layout_width="match_parent"        android:layout_height="wrap_content"        app:itemIconTint="@drawable/bottom_navigation_selector"        app:itemTextColor="@drawable/bottom_navigation_selector"        app:menu="@menu/menu_bottom_navigation"/></LinearLayout>
itemIconHint属性可以修改图标的颜色用一个selector区别选中与非选中的颜色

itemTextColor属性可以修改文字的颜色,同理,用selector区别选中与非选中的颜色

memu属性需要我们新建一个menu文件:

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android">    <item        android:id="@+id/item_news"        android:icon="@mipmap/ic_news_gray"        android:title="新闻" />    <item        android:id="@+id/item_lib"        android:icon="@mipmap/ic_library_gray"        android:title="图书" />    <item        android:id="@+id/item_find"        android:icon="@mipmap/ic_discovery_gray"        android:title="发现" />    <item        android:id="@+id/item_more"        android:icon="@mipmap/ic_more_gray"        android:title="更多" /></menu>
BottomNavgationView控件中所有的按钮都需要通过这个menu文件来生成。

bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {            @Override            public boolean onNavigationItemSelected(@NonNull MenuItem item) {                switch (item.getItemId()){                    case R.id.item_news:                        viewPager.setCurrentItem(0);                        break;                    case R.id.item_lib:                        viewPager.setCurrentItem(1);                        break;                    case R.id.item_find:                        viewPager.setCurrentItem(2);                        break;                    case R.id.item_more:                        viewPager.setCurrentItem(3);                        break;                }                return false;            }        });
通过设置监听来控制viewpager滑动到第几页。

重点来了:


官方的BottomNavigationView默认有个放大的ShiftingMode效果,但是尚未支持代码层级的切换。在3个menu item及以下时默认关闭,而到了4个及以上时就懵逼了,因为我们是要做ViewPager的侧滑啊!

滑动时,ViewPager是切换过去了,下面这item也切换过去了,但是你说说这效果是不是坑爹!!?

没办法了,查了一圈资料,发现官方这个控件还不支持代码层级的切换选项(如果你发现了,请告诉我)。迫不得已,只能看源码,开启上帝(反射)模式了!


在实例化BottomNavigationView后调用一行代码即可BottomNavigationViewHelper.disableShiftMode(bottomNavifationView);

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                bottomNavigationView.getMenu().getItem(position).setChecked(true);            }            @Override            public void onPageScrollStateChanged(int state) {            }        });
同样,我们监听viewPager的页面切换监听,去修改BottomNavigationView的选中状态,至此大功告成

源码地址:https://gitee.com/fireqiang/BottomNavigationView.git





阅读全文
0 0
原创粉丝点击