首先安装依赖
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 {
}
}