用androidx实现底部导航

implementation ‘com.google.android.material:material:1.1.0-alpha08’
导入material的样式

<?xml version="1.0" encoding="utf-8"?>

<androidx.viewpager.widget.ViewPager
    android:id="@+id/mainViewPager"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />

<com.google.android.material.bottomnavigation.BottomNavigationView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/tabs_rg"
    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>
然后再layout的menu下新建个xml 内容如下 <?xml version="1.0" encoding="utf-8"?>
</menu>
贴一个文件**drawable/tab_record_selector.xml**
这里是设置选中的文字颜色 和选中未选中的图片样式其他都是这样做
其实只要三个图   他会帮你把图片的颜色改了 
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/user_select" android:state_checked="true"/>
<item android:drawable="@mipmap/user" />
</selector>

让后mainactivity.java里这么写


public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {
    private ArrayList<Fragment> 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;
    private String TAG="MainActivity";

    @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(item -> { //这里是为了点击底部 切换viewpage
          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(){ // 给三个页面绑定到viewpage上去
     oneFragment = new OneFragment();
     twoFragment = new TwoFragment();
     threeFragment = new ThreeFragment();
     fragmentList=new ArrayList<Fragment>();
     //给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());//给viewpage加监听 这样滑动能切换底部导航
 }

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) {   //这里是点击底部 切换viewpage 双向绑定
    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);
//        }
    }
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if ((Intent.FLAG_ACTIVITY_CLEAR_TOP & intent.getFlags()) != 0) {
        finish();
    }
}

//这个是退出了 但是还在后台运行

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK) {
            Intent home = new Intent(Intent.ACTION_MAIN);
            home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            home.addCategory(Intent.CATEGORY_HOME);
            startActivity(home);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

有点多 但是不难 主要是为了底部的红点 所以选择了这个 方案
人要耐得住寂寞,才能守得住繁华。人生最痛苦的就是拿不起放不下,不属于自己的快乐,及时放手也许是一种解脱,生活中没有谁对谁错,只有适不适合。当发现很多已经改变,更要面对的是事实。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现底部导航栏,可以使用 Android 中的 TabLayout 和 ViewPager。具体步骤如下: 1. 在布局文件中添加 TabLayout 和 ViewPager 组件。 2. 创建三个 Fragment,并在每个 Fragment 中添加相应的布局和逻辑。 3. 创建一个 PagerAdapter,用于将 Fragment 和 TabLayout 绑定。 4. 在 MainActivity 中设置 ViewPager 的适配器,并将 TabLayout 和 ViewPager 进行绑定。 5. 在 MainActivity 中添加底部导航栏的选项卡,并设置选项卡的图标和标签。 6. 在 MainActivity 中添加选项卡的点击事件,以便切换不同的 Fragment。 下面是一个简单的实现示例: MainActivity.java: ```java public class MainActivity extends AppCompatActivity { private TabLayout mTabLayout; private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTabLayout = findViewById(R.id.tab_layout); mViewPager = findViewById(R.id.view_pager); // 创建三个 Fragment Fragment1 fragment1 = new Fragment1(); Fragment2 fragment2 = new Fragment2(); Fragment3 fragment3 = new Fragment3(); // 创建 PagerAdapter MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager()); adapter.addFragment(fragment1, "Tab 1"); adapter.addFragment(fragment2, "Tab 2"); adapter.addFragment(fragment3, "Tab 3"); // 设置 ViewPager 的适配器 mViewPager.setAdapter(adapter); // 将 TabLayout 和 ViewPager 进行绑定 mTabLayout.setupWithViewPager(mViewPager); // 设置选项卡的图标和标签 mTabLayout.getTabAt(0).setIcon(R.drawable.ic_tab1).setText("Tab 1"); mTabLayout.getTabAt(1).setIcon(R.drawable.ic_tab2).setText("Tab 2"); mTabLayout.getTabAt(2).setIcon(R.drawable.ic_tab3).setText("Tab 3"); // 添加选项卡的点击事件,以便切换不同的 Fragment mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); } // 自定义 PagerAdapter private class MyPagerAdapter extends FragmentPagerAdapter { private List<Fragment> mFragmentList = new ArrayList<>(); private List<String> mTitleList = new ArrayList<>(); public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mTitleList.add(title); } @Nullable @Override public CharSequence getPageTitle(int position) { return mTitleList.get(position); } } } ``` activity_main.xml: ```xml <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" app:tabGravity="fill" app:tabIndicatorColor="@android:color/white" app:tabIndicatorHeight="2dp" app:tabSelectedTextColor="@android:color/white" app:tabTextColor="@android:color/white" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout> ``` 注意:上述代码使用了 Android Support Library,如果你使用的是 AndroidX 的话,需要将相应的组件和包名进行更改。另外,还需要在 build.gradle 文件中添加相应的依赖。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值