BottomNavigationView +小徽标 99+

首先安装依赖
implementation’com.google.android.material:material:1.1.0-alpha08’
然后将项目迁移到android x
期间出的小问题百度 很好解决 一般不会出问题

然后
<com.google.android.material.bottomnavigation.BottomNavigationView
xmlns:app=“http://schemas.android.com/apk/res-auto
android:id="@+id/tabs_rg"
style="@style/MyBottom"
android:layout_width=“match_parent”
android:layout_height=“70dp”
android:layout_alignParentBottom=“true”
android:layout_gravity=“bottom”
android:layout_marginBottom=“2dp”
app:itemIconTint="@color/tab_text_color_selector"
app:itemTextColor="@color/tab_text_color_selector"
android:background="#fff"
app:menu="@menu/navigation"
app:labelVisibilityMode=“labeled”>
</com.google.android.material.bottomnavigation.BottomNavigationView>
package com.afei.bottomtabbar.activity;

底部导航栏改成 bottomnavigation 的
之后 我们 创建了三个fragment 还有viewpager
(新手可以先学习这两个)
然后 很简单 看我写的setupBadging()方法就会出现 99的消息标志
int menuItemId = bottomNavigationView.getMenu().getItem(2).getItemId();
BadgeDrawable badge = bottomNavigationView.getOrCreateBadge(menuItemId);
badge.setVisible(false);
badge.clearNumber();
注意 APPTHEM要继承
Theme.MaterialComponents.Light.NoActionBar
主题
其他到这 你可以使用androidx的一些库了
https://github.com/material-components/material-components-android/tree/master/docs
这是地址 当然还有很多组件
https://github.com/material-components/material-components-android/releases
这里下载实列
这里是清楚标志的代码
看我的代码 实现应该很容易 代码不难 一开始看了很多文章 才写出来 也换了很多方式
但决定采用这种逻辑最为清晰的方式作为解决方案

public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {
private ArrayList fragmentList;
private BottomNavigationView mGroup;
private ViewPager vp;
private OneFragment oneFragment;
private TwoFragment twoFragment;
private ThreeFragment threeFragment;
private FragmentAdapter mFragmentAdapter;
private BottomNavigationView bottomNavigationView;
private static Boolean isExit = false;
Timer tExit = new Timer();
TimerTask task;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bottomNavigationView=(BottomNavigationView)findViewById(R.id.tabs_rg);
    //bottomNavigationView.removeBadge(menuItemId);
    setupBadging();
    initViews();
    initViewPager();
}
private void setupBadging() {

    int menuItemId = bottomNavigationView.getMenu().getItem(2).getItemId();
    // A badge with the text "99" will be displayed.
    BadgeDrawable badge = bottomNavigationView.getOrCreateBadge(menuItemId);

    badge.setVisible(true);
    badge.setNumber(99);
}

/**
 * 初始化布局View
 */
private void initViews() {
    mGroup=(BottomNavigationView)findViewById(R.id.tabs_rg);
    vp = (ViewPager) findViewById(R.id.mainViewPager);
  mGroup.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {

      @Override
      public boolean onNavigationItemSelected(@NonNull MenuItem item) {
          switch (item.getItemId()) {
              case R.id.today_tab:
                  vp.setCurrentItem(0);
                  return true;

              case R.id.record_tab:
                  vp.setCurrentItem(1);
                  return true;

              case R.id.contact_tab:
                  vp.setCurrentItem(2);
                  int menuItemId = bottomNavigationView.getMenu().getItem(2).getItemId();
                  BadgeDrawable badge = bottomNavigationView.getOrCreateBadge(menuItemId);
                  badge.setVisible(false);
                  badge.clearNumber();
                  return true;
          }
          return false;
      }
  });

}

private void initViewPager(){
oneFragment = new OneFragment();
twoFragment = new TwoFragment();
threeFragment = new ThreeFragment();
fragmentList=new ArrayList();
//给FragmentList添加数据
fragmentList.add(oneFragment);
fragmentList.add(twoFragment);
fragmentList.add(threeFragment);
mFragmentAdapter = new FragmentAdapter(this.getSupportFragmentManager(), fragmentList);
vp.setOffscreenPageLimit(3);//ViewPager的缓存为4帧
vp.setAdapter(mFragmentAdapter);
vp.setCurrentItem(0);//初始设置ViewPager选中第一帧
vp.addOnPageChangeListener(new MyOnPageChangeListener());
}

public class FragmentAdapter extends FragmentPagerAdapter {
    List<Fragment> fragmentList = new ArrayList<Fragment>();
    public FragmentAdapter(FragmentManager fm, List<Fragment> fragmentList) {
        super(fm);
        this.fragmentList=fragmentList;
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

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

}


private class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {
    @Override
    public void onPageScrolled(int i, float v, int i1) {

    }

    @Override
    public void onPageSelected(int i) {
        switch (i){
            case 0:
                mGroup.setSelectedItemId(R.id.today_tab);
                break;
            case 1:
                mGroup.setSelectedItemId(R.id.record_tab);
                break;
            case 2:
                mGroup.setSelectedItemId(R.id.contact_tab);
                break;
        }
    }

    @Override
    public void onPageScrollStateChanged(int i) {

    }
}
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
    switch (i) {
        case R.id.today_tab:
            //ViewPager显示第一个Fragment且关闭页面切换动画效果
            vp.setCurrentItem(0,true);
            break;
        case R.id.record_tab:
            vp.setCurrentItem(1,true);
            break;
        case R.id.contact_tab:
            vp.setCurrentItem(2,true);
            break;
    }

}

// 两次退出
@Override
public void onBackPressed() {
if (isExit == false) {
isExit = true;
Toast.makeText(this, “再按一次退出程序”, Toast.LENGTH_SHORT).show();
task = new TimerTask() {
@Override
public void run() {
isExit = false;
}
};
tExit.schedule(task, 2000);
} else {
finish();
System.exit(0);
}
}

private class BottomNavigationViewHelper {
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值