Android 底部导航的实现方式

简介: Android 底部导航的实现方式

1.ViewPager+TabLayout

1.1xml

 <androidx.viewpager.widget.ViewPager
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="10"
            android:id="@+id/vp_main" />
 
        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tab_main"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />

1.2创建对应的 Fragment

1.3 编写Adapter

public class NavigationAdapter extends FragmentPagerAdapter {
    private List<Fragment> mFragments;
    private List<String> mtitle;
    public NavigationAdapter(@NonNull FragmentManager fm,List<Fragment> mFragments,List<String> mtitle) {
        super(fm);
        this.mFragments = mFragments;
        this.mtitle = mtitle;
    }
 
 
    @NonNull
    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position);
    }
 
    @Override
    public int getCount() {
        return mFragments.size();
    }
 
    @Nullable
    @Override  //获取分页标题
    public CharSequence getPageTitle(int position) {
        return mtitle.get(position);
    }
}

1.4 activity里初始化

 
    private void initView() {
        mFragments=new ArrayList<>();
        mFragments.add(new MsgFragment());
        mFragments.add(new FriendsFragment());
        mFragments.add(new NewThingsFragment());
        mFragments.add(new MyFragment());
 
        mtitle=new ArrayList<String>();
        mtitle.add("信息");
        mtitle.add("联系人");
        mtitle.add("发现");
        mtitle.add("我的");
 
        //实例化适配器
        NavigationAdapter adapt = new NavigationAdapter(getSupportFragmentManager(), mFragments, mtitle);
        mMainBinding.vpMain.setAdapter(adapt);
 
        mMainBinding.tabMain.setupWithViewPager(mMainBinding.vpMain);//给tab设置一个viewpager
        //viewpager的监听
        mMainBinding.vpMain.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
 
            }
 
            @Override  //选中
            public void onPageSelected(int position) {
                switch (position){
                    case 0:
                        break;
 
                    case 1:
                        break;
 
                    case 2:
                        break;
                    case 3:
                        break;
                }
            }
 
            @Override   // //state的状态有三个,0表示什么都没做,1正在滑动,2滑动完毕
            public void onPageScrollStateChanged(int state) {
 
            }
        });
    }

2.RadioGroup + ViewPager

2.1xml

        <androidx.viewpager.widget.ViewPager
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="10"
            android:id="@+id/vp_main" />
        
        <RadioGroup
            android:id="@+id/rg_main"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="2">
            <RadioButton
                android:checked="true"
                android:textColor="@drawable/textcolor"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:button="@null"
                android:text="消息"
                android:drawableTop="@drawable/msg"/>
            <RadioButton
                android:textColor="@drawable/textcolor"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="联系人"
                android:button="@null"  去掉radiobutton的样式
                android:drawableTop="@drawable/friends"/>
            <RadioButton
                android:textColor="@drawable/textcolor"
                android:layout_width="0dp"
                android:gravity="center"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:text="动态"
                android:button="@null"
                android:drawableTop="@drawable/newthing"/>
            <RadioButton
                android:textColor="@drawable/textcolor"
                android:layout_width="0dp"
                android:gravity="center"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:text="我的"
                android:button="@null"
                android:drawableTop="@drawable/my"/>
        </RadioGroup>

2.2.编写selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/friend" android:state_checked="false"/>
    <item android:drawable="@mipmap/friend1" android:state_checked="true"/>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" tools:ignore="MissingDefaultResource">
    <item android:color="@color/black" android:state_checked="false"/>
    <item android:color="@color/bule" android:state_checked="true"/>
</selector>

2.3.mainActivity

    private void initViewByRG() {
        mFragments = new ArrayList<>(4);
        mFragments.add(new MsgFragment());
        mFragments.add(new FriendsFragment());
        mFragments.add(new NewThingsFragment());
        mFragments.add(new MyFragment());
        // init view pager
        NavigationAdapter navigationAdapter = new NavigationAdapter(getSupportFragmentManager(), mFragments);
        mMainBinding.vpMain.setAdapter(navigationAdapter);
        // register listener
        mMainBinding.vpMain.addOnPageChangeListener(mPageChangeListener);
        mMainBinding.rgMain.setOnCheckedChangeListener(mOnCheckedChangeListener);
    }
 
    private ViewPager.OnPageChangeListener mPageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
 
        }
 
        @Override
        public void onPageSelected(int position) {
            if (position!=0){
                RadioButton first = (RadioButton) mMainBinding.rgMain.getChildAt(0);
                first.setChecked(false);
            }
            RadioButton radioButton = (RadioButton) mMainBinding.rgMain.getChildAt(position);
            radioButton.setChecked(true);
        }
 
        @Override
        public void onPageScrollStateChanged(int state) {
 
        }
    };
 
    private RadioGroup.OnCheckedChangeListener mOnCheckedChangeListener = new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            for (int i = 0; i < group.getChildCount(); i++) {
                if (group.getChildAt(i).getId() == checkedId) {
                    mMainBinding.vpMain.setCurrentItem(i);
                    return;
                }
            }
        }
    };

3.BottomNavigationView

这个按照官方的操作,创建然后改一下就行了,这里不进行任何说明


目录
相关文章
|
2天前
|
Java Android开发
Android 12 自定义底部导航栏
Android 12 自定义底部导航栏
13 4
|
4天前
|
调度 Android开发
Android9底部导航栏出现空白按钮问题分析
Android9底部导航栏出现空白按钮问题分析
14 0
|
9月前
|
Android开发
Android 使用BottomNavigationView和Novigation组件实现底部导航功能
Android 使用BottomNavigationView和Novigation组件实现底部导航功能
167 0
|
9月前
|
Android开发
Android 中使用RadioGroup+Fragment实现底部导航栏的功能
Android 中使用RadioGroup+Fragment实现底部导航栏的功能
77 0
|
12月前
|
XML Android开发 数据格式
Android 底部导航栏(四、ViewPager+RadioGroup+Fragment)简单易懂
底部导航栏在Android应用中随处可见,今天使用ViewPager+RadioGroup+Fragment这三个控件来实现此功能。前面写了有三种实现方式,有兴趣可以去看看
|
12月前
|
XML Android开发 数据格式
Android 底部导航栏(三、ViewPager+TabLayout+Fragment)简单易懂
底部导航栏在Android应用中随处可见,今天使用ViewPager+TabLayout+Fragment这三个控件来实现此功能。 前面使用了另外两个方法来实现导航栏,不过我还是更喜欢Viewpager,代码也少,毕竟前两个不能左右滑动。
|
12月前
|
XML Android开发 数据格式
Android 底部导航栏(二、自定义View+Fragment)
上一片文章用的是BottomNavigationView+Menu+Fragment,但是可能有时候需求不一样,menu的样式不太够,所以需要自定义View来实现。
|
12月前
|
XML Android开发 数据格式
Android 底部导航栏(一、BottomNavigationView+Menu+Fragment)
现在常用的App主页都会有一个底部导航栏,根据需求也使用过好几种方法进行实现,于是想着还是总结一下,今天还写一个简单的BottomNavigationView方法来实现这个功能
|
XML API Android开发
Android笔记:底部导航栏的动态替换方案
Android笔记:底部导航栏的动态替换方案
111 0
|
Android开发 iOS开发
Android底部导航——BottomNavigationView+ViewPager+Fragment
Android底部导航——BottomNavigationView+ViewPager+Fragment
413 0
Android底部导航——BottomNavigationView+ViewPager+Fragment