RadioGroup+ViewPager +Fragment 制作APP主界面底部导航和左右滑动

简介: RadioGroup+ViewPager +Fragment 制作APP主界面底部导航和左右滑动

实现效果图如下:


20190909171409196.gif


PS:下面那个红色的我也不知道是怎么回事,看到上面的两层水印了,它们的存在证明了我的穷。


在日常开发中我们常常会用到类似微信或者QQ的底部导航。实现这样的效果有多种,今天就为大家介绍一种实现简单,可控性好的底部导航的实现方法。


1.创建布局


首先创建一个项目 ,然后再MainActivity的布局文件中放两个控件 ViewPager和RadioGroup。代码如下


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@color/white"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        />
    <RadioGroup
        android:layout_alignParentBottom="true"
        android:id="@+id/rg"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal"
        android:gravity="center"
        android:background="#FDFDFD"
        >
        <RadioButton
            android:drawableTop="@drawable/selector_wallet_rb_img"
            android:text="one"
            style="@style/main_rb_style"
            android:id="@+id/rb_wallet"
            />
        <RadioButton
            android:drawableTop="@drawable/selector_treasure_rb_img"
            android:text="two"
            style="@style/main_rb_style"
            android:id="@+id/rb_treasure"
            />
        <RadioButton
            android:drawableTop="@drawable/selector_home_rb_img"
            android:text="three"
            style="@style/main_rb_style"
            android:id="@+id/rb_home"
            />
        <RadioButton
            android:drawableTop="@drawable/selector_otc_rb_img"
            android:text="four"
            style="@style/main_rb_style"
            android:id="@+id/rb_otc"
            />
        <RadioButton
            android:drawableTop="@drawable/selector_my_rb_img"
            android:text="five"
            style="@style/main_rb_style"
            android:id="@+id/rb_my"
            />
    </RadioGroup>
</LinearLayout>


其中我在RadioButton里面加入了样式文件,是底部导航按钮点击前后的效果图包括文字的切换, 样式文件代码如下


selector_wallet_rb_img.xml


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/icon_checked_wallet" android:state_checked="true" />
    <item android:drawable="@mipmap/icon_normal_wallet" android:state_checked="false" />
</selector>


selector_treasure_rb_img.xml


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/icon_checked_treasure" android:state_checked="true" />
    <item android:drawable="@mipmap/icon_normal_treasure" android:state_checked="false" />
</selector>


selector_home_rb_img.xml


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/icon_checked_home" android:state_checked="true"/>
    <item android:drawable="@mipmap/icon_normal_home" android:state_checked="false"/>
</selector>


selector_otc_rb_img.xml


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/icon_checked_otc" android:state_checked="true" />
    <item android:drawable="@mipmap/icon_normal_otc" android:state_checked="false" />
</selector>


selector_my_rb_img.xml


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/icon_checked_my" android:state_checked="true" />
    <item android:drawable="@mipmap/icon_normal_my" android:state_checked="false" />
</selector>


大体图片命名如下:


2019090915471378.png


所有图片都已经放在这里了,另存为 添加到自己的文件夹再命名即可。


20190909154208394.png

20190909154341888.png

20190909154414646.png

20190909154447263.png

20190909154521925.png

20190909154750568.png

20190909154758813.png

20190909154809433.png

20190909154816242.png

2019090915482353.png

main_rb_style样式如下,放在styles.xml中

  <!--底部导航rb设置-->
    <style name="main_rb_style" >
        <item name="android:layout_weight">1</item>
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:button">@null</item>
        <item name="android:gravity">center</item>
        <item name="android:textSize">12sp</item>
        <item name="android:textColor">@drawable/selector_main_rb_text_color</item>
    </style>


选中按钮相应的文字颜色变化样式如下


selector_main_rb_text_color.xml


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/blue" android:state_checked="true"/>
    <item android:color="@color/ed_gray" android:state_checked="false"/>
</selector>


做完这些你就可以看到这样的效果图


20190909155133422.png


到这一步,点击效果就可以了,然后就是在ViewPager中添加碎片Fragment,添加五个碎片,因为涉及到项目的机密,所以我这里命名就不那么规范了,就用英文的1~5来命名了 。(实际开发中一定不要这样,因为这样的命名没有意义,还会增加后期代码维护的难度,如果是一个接手你项目的人看到这种命名方式,估计你要被叼的。)


2 创建碎片


然后创建一个OneFragment 和fragment.xml


代码如下:


public class OneFragment extends Fragment {
    @Override
    public View onCreateView(final LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.fragment_one,
                container, false);
        return view;
    }
}


fragment_one.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    tools:context=".fragment.OneFragment">
    <TextView
        android:textSize="@dimen/sp_40"
        android:textColor="@color/blue"
        android:text="ONE"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>


后面四个我就不一一列出来了,代码都差不多,改个名字就可以了。


3.创建适配器


然后创建一个适配器 MainFragmentPagerAdapter 用于加载碎片


代码如下


public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {
    List<Fragment> fragmentList = new ArrayList<>();
    MainFragmentPagerAdapter adapter;
    ViewPager viewPager;
    RadioGroup rg;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        initView();
        //绑定RadioButton
        initViewPager();
    }
    private void initView() {
        viewPager = findViewById(R.id.viewPager);
        rg = findViewById(R.id.rg);
        rg.setOnCheckedChangeListener(this);
        rg.getChildAt(0).performClick();
    }
    private void initViewPager() {
        //添加碎片
        fragmentList.add(new OneFragment());
        fragmentList.add(new TwoFragment());
        fragmentList.add(new ThreeFragment());
        fragmentList.add(new FourFragment());
        fragmentList.add(new FiveFragment());
        adapter = new MainFragmentPagerAdapter(getSupportFragmentManager(), fragmentList);
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {
            }
            @Override
            public void onPageSelected(int i) {
                switch (i) {
                    case 0:
                        rg.check(R.id.rb_wallet);
                        break;
                    case 1:
                        rg.check(R.id.rb_treasure);
                        break;
                    case 2:
                        rg.check(R.id.rb_home);
                        break;
                    case 3:
                        rg.check(R.id.rb_otc);
                        break;
                    case 4:
                        rg.check(R.id.rb_my);
                        break;
                }
            }
            @Override
            public void onPageScrollStateChanged(int i) {
            }
        });
    }
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
        switch (checkedId) {
            case R.id.rb_wallet:
                viewPager.setCurrentItem(0);
                break;
            case R.id.rb_treasure:
                viewPager.setCurrentItem(1);
                break;
            case R.id.rb_home:
                viewPager.setCurrentItem(2);
                break;
            case R.id.rb_otc:
                viewPager.setCurrentItem(3);
                break;
            case R.id.rb_my:
                viewPager.setCurrentItem(4);
                break;
        }
    }
}


就这么愉快地结束了


相关文章
|
6月前
|
XML Java Android开发
Android Studio App开发之翻页视图ViewPager的讲解及实战(附源码 包括翻页视图和翻页标签栏)
Android Studio App开发之翻页视图ViewPager的讲解及实战(附源码 包括翻页视图和翻页标签栏)
880 0
|
2月前
|
开发工具
uniapp, 短剧视频类App实现参考,支持滑动播放,仿抖音 仿陌陌 短视频 无限滑动播放 视频流
阿里云点播服务web播放器sdk,短剧视频类App实现参考。仿抖音 仿陌陌 短视频 无限滑动播放 视频流。无uniapp video 原生组件的层级、遮挡、覆盖问题,适合与不同功能视图组合使用,实现丰富的应用功能。
uniapp, 短剧视频类App实现参考,支持滑动播放,仿抖音 仿陌陌 短视频 无限滑动播放 视频流
|
6月前
|
XML Java Android开发
Android Studio App开发之碎片Fragment的讲解及实战(附源码 包括静态和动态注册)
Android Studio App开发之碎片Fragment的讲解及实战(附源码 包括静态和动态注册)
362 1
|
6月前
|
XML Java Android开发
Android Studio App开发之实现简单的启动引导页ViewPager(附源码 实现App的欢迎页面)
Android Studio App开发之实现简单的启动引导页ViewPager(附源码 实现App的欢迎页面)
743 1
|
6月前
|
搜索推荐
App Inventor 2 打造个性化酷炫的底部导航条
虽说 App Inventor 2 是简单的积木式开发手机 App,但是通过众多拓展它也能实现很多酷炫的功能,比如本文介绍的一款酷炫导航条,函数代码块用法超级简单,效果不错。当然还有更复杂更个性化的导航条后续再分享。
151 0
|
6月前
|
XML Java Android开发
Android App开发音量调节中实现拖动条和滑动条和音频管理器AudioManager讲解及实战(超详细 附源码和演示视频)
Android App开发音量调节中实现拖动条和滑动条和音频管理器AudioManager讲解及实战(超详细 附源码和演示视频)
257 0
|
6月前
|
XML Java Android开发
Android App手势冲突处理中上下左右滑动的处理以及侧滑边缘菜单的讲解及实战(附源码 可直接使用)
Android App手势冲突处理中上下左右滑动的处理以及侧滑边缘菜单的讲解及实战(附源码 可直接使用)
474 0
|
6月前
|
XML Java Android开发
Android App事件交互中区分点击和长按动作以及识别手势滑动方向的讲解及实战(附源码 可直接使用)
Android App事件交互中区分点击和长按动作以及识别手势滑动方向的讲解及实战(附源码 可直接使用)
501 0
uni-app学习笔记-手动配置底部导航(二)
uni-app学习笔记-手动配置底部导航(二)
65 0
uni-app配置底部导航栏
uni-app配置底部导航栏
174 0

热门文章

最新文章