Android BottomNavigationView与ViewPager+fragment结合实现material Tab标准效果



1.创建一个android studio工程并依赖最新的Design Support Library(25) 在app的build.gradle中:
compile 'com.android.support:design:25.2.0'


2.为MainActivity创建如下布局:

< RelativeLayout xmlns: android = "http://schemas.android.com/apk/res/android"
xmlns: tools = "http://schemas.android.com/tools"
android :layout_width= "match_parent"
android :layout_height= "match_parent"
android :background= "@android:color/background_light"
xmlns: app = "http://schemas.android.com/apk/res-auto"
tools :context= ".MainActivity" >
< android.support.v4.view.ViewPager
android :id= "@+id/viewpager"
android :layout_width= "match_parent"
android :layout_height= "match_parent"
android :layout_above= "@+id/btnv_buttom" />

< android.support.design.widget.BottomNavigationView
android :id= "@+id/btnv_buttom"
android :layout_width= "match_parent"
android :layout_height= "65dp"
app :menu= "@menu/menu_main"
android :layout_alignParentBottom= "true"
>

</ android.support.design.widget.BottomNavigationView >
</ RelativeLayout >

app:itemBackground:设置item的背景,对应setItemBackgroundResource(int resId)方法 app:itemIconTintUsed:设置icon的颜色,对应setItemIconTintList(ColorStateList tint)方法 app:itemTextColor:设置文字的颜色,对应setIteTextColor(ColorStateList textColor)方法

链接:http://www.jianshu.com/p/46c629841803
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

3. MainAdapter

public class MainAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();

public MainAdapter(FragmentManager manager) {
super (manager);
}
@Override
public Fragment getItem( int position) {
return mFragmentList .get(position);
}

@Override
public int getCount() {
return mFragmentList .size();
}

public void addFragment(Fragment fragment) {
mFragmentList .add(fragment);
}

}
5. MainAdapter 设置OnPageChangeListener,本文 重要代码在此 ,当ViewPagerAdapter滑动fragment的时候BottomNavigationView的选中状态也跟着变化

bottomNavigationView .setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected( @NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id. home :
viewpager .setCurrentItem( 0 );
break ;
case R.id. favorite :
viewpager .setCurrentItem( 1 );
break ;
case R.id. me :
viewpager .setCurrentItem( 2 );
break ;
}
return false ;
}
});


viewpager .addOnPageChangeListener( new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled( int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected( int position) {
if ( prevMenuItem != null ) {
prevMenuItem .setChecked( false );
} else {
bottomNavigationView .getMenu().getItem( 0 ).setChecked( false );
}
bottomNavigationView .getMenu().getItem(position).setChecked( true );
prevMenuItem = bottomNavigationView .getMenu().getItem(position);

}

@Override
public void onPageScrollStateChanged( int state) {

}
});

MainAdapter mainAdapter= new MainAdapter(getSupportFragmentManager());
mainAdapter.addFragment( new FindFragment());
mainAdapter.addFragment( new SexyFragment());
mainAdapter.addFragment( new ReleaseFragment());
viewpager .setAdapter(mainAdapter);

6.如果底部的按钮大于3个以上是出现问题,这需要用反射来制作。有需求,请参考以下的
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值