效果图如下所示:


配置文件
viewpage2_.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".viewpage2.RgActivity"><androidx.viewpager2.widget.ViewPager2android:id="@+id/vp_rg"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@+id/rg_vp" /><RadioGroupandroid:id="@+id/rg_vp"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_gravity="bottom"android:orientation="horizontal"><RadioButtonandroid:id="@+id/rb_home"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:button="@null"android:checked="true"android:drawablePadding="5dp"android:gravity="center"android:paddingTop="5dp"android:paddingBottom="5dp"android:text="@string/home"android:textColor="@color/selector_rg"android:textSize="16sp" /><RadioButtonandroid:id="@+id/rb_msg"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:button="@null"android:drawablePadding="5dp"android:gravity="center"android:paddingTop="5dp"android:paddingBottom="5dp"android:text="@string/msg"android:textColor="@color/selector_rg"android:textSize="16sp" /><RadioButtonandroid:id="@+id/rg_my"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:button="@null"android:drawablePadding="5dp"android:gravity="center"android:paddingTop="5dp"android:paddingBottom="5dp"android:text="@string/my"android:textColor="@color/selector_rg"android:textSize="16sp" /></RadioGroup>
</RelativeLayout>

home.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/colorAccent"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_vertical|center_horizontal"android:text="@string/home"/>
</LinearLayout>

msg.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/colorPrimaryDark"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_vertical|center_horizontal"android:text="@string/msg"/>
</LinearLayout>

my.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/colorPrimary"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_vertical|center_horizontal"android:text="@string/my"/>
</LinearLayout>

values/strings.xml

<resources><string name="app_name">My Application</string><string name="home">home</string><string name="msg">消息</string><string name="my">我的</string>
</resources>

values/colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><color name="colorPrimary">#008577</color><color name="colorPrimaryDark">#00574B</color><color name="colorAccent">#D81B60</color><color name="selector_rg">#D81B60</color><color name="colorFirst">#550012</color>
</resources>

Activity代码
RgAdapter.java

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;import java.util.ArrayList;
import java.util.List;public class RgAdapter extends FragmentStateAdapter {private List<Class> fragments;public RgAdapter(@NonNull FragmentActivity fragmentActivity) {super(fragmentActivity);if (fragments == null) {fragments = new ArrayList<>();}}public void addFragment(Fragment fragment) {if (fragments != null) {fragments.add(fragment.getClass());}}@NonNull@Overridepublic Fragment createFragment(int position) {try {return (Fragment) fragments.get(position).newInstance();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();}return null;}@Overridepublic int getItemCount() {return fragments.size();}
}

RgActivity.java

import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.RadioButton;
import android.widget.RadioGroup;import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;import com.idsbg.foxconn.myapplication.R;public class RgActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {private ViewPager2 viewPager2;RadioButton home,msg,my;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.viewpage2_);RgAdapter rgAdapter = new RgAdapter(this);RadioGroup radioGroup = findViewById(R.id.rg_vp);viewPager2 = findViewById(R.id.vp_rg);radioGroup.setOnCheckedChangeListener(this);viewPager2.setAdapter(rgAdapter);rgAdapter.addFragment(new HomeFragment());rgAdapter.addFragment(new MessageFragment());rgAdapter.addFragment(new MyFragment());home=(RadioButton) findViewById(R.id.rb_home);msg=(RadioButton) findViewById(R.id.rb_msg);my=(RadioButton) findViewById(R.id.rg_my);Drawable drawable1=getResources().getDrawable(R.drawable.home);drawable1.setBounds(0,0,69,69);home.setCompoundDrawables(null,drawable1,null,null);Drawable drawable2=getResources().getDrawable(R.drawable.xiaoxi2);drawable2.setBounds(0,0,69,69);msg.setCompoundDrawables(null,drawable2,null,null);Drawable drawable3=getResources().getDrawable(R.drawable.wode);drawable3.setBounds(0,0,69,69);my.setCompoundDrawables(null,drawable3,null,null);viewPager2.setCurrentItem(0);viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {@Overridepublic void onPageSelected(int position) {super.onPageSelected(position);switch (position) {case 0:home.setChecked(true);break;case 1:msg.setChecked(true);break;case 2:my.setChecked(true);break;}}});}@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {switch (checkedId){case R.id.rb_home:viewPager2.setCurrentItem(0);break;case R.id.rb_msg:viewPager2.setCurrentItem(1);break;case R.id.rg_my:viewPager2.setCurrentItem(2);break;}}
}

HomeFragment.java

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;import com.idsbg.foxconn.myapplication.R;public class HomeFragment extends Fragment {@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View rootView=inflater.inflate(R.layout.home,container,false);return rootView;}
}

MessageFragment.java

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;import com.idsbg.foxconn.myapplication.R;public class MessageFragment extends Fragment {@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View rootView = inflater.inflate(R.layout.msg, container, false);return rootView;}}

MyFragment.java

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;import com.idsbg.foxconn.myapplication.R;public class MyFragment extends Fragment {@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View rootView=inflater.inflate(R.layout.my,container,false);return rootView;}
}

drawable图标可从alibaba矢量库获得

ViewPager2与RadioGroup连用实现底部导航相关推荐

  1. Android应用底部导航栏(选项卡)实例

    现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能. 我们先看下该demo实例的框架图: 其 ...

  2. 底部导航栏的几种实现方式

    概述 Android底部导航栏实现方式真的是太多了~在这里仅介绍几种实现方式~建议使用TabLayout +ViewPager ,TabLayout是Android Material Design中的 ...

  3. Android 底部导航栏添加消息数目提示

    效果图 写一篇短小精悍,好用的知识积累吧.开发中时常会出现信息提醒,新内容提示等等一堆问题.其实就是在各种控件或者是item上面加"小圆点".网上一搜一大堆...但是感觉说的好多. ...

  4. VS 2015 开发Android底部导航条----[实例代码,多图]

    1.废话背景介绍  在Build 2016开发者大会上,微软宣布,Xamarin将被整合进所有版本的Visual Studio之中. 这也就是说,Xamarin将免费提供给所有购买了Visual St ...

  5. 一行代码实现底部导航栏TabLayout

    欢迎关注公众号:JueCode app中底部导航栏已经是很常见的控件了,比如微信,简书,QQ等都有这类控件,都是点击底部标签切换界面.主要的实现手段有 RadioGroup FragmentTabLa ...

  6. android fragment 底部菜单栏,一句话搞定Android底部导航栏,一键绑定Fragment、ViewPager...

    现在大多数App都会用到底部导航栏,比如常见的聊天工具QQ.微信.购物App等等,有了底部导航栏,用户可以随时切换界面,查看不同的内容.它的实现方式也很多,以前大多使用TabHost来实现,但是现在我 ...

  7. android加号底部导航栏,EasyNavigation Android 底部导航栏████几行代码实现 Tab 导航(随意定制加号,带红点消息提示) @codeKK Android开源站...

    几行代码轻松实现底部导航栏(Tab 文字图片高度随意更改): 中间可添加加号按钮,也可添加文字:(足够的属性满足你需要实现的加号样式) 如果还不能满足.中间可添加自定义 View: Tab 中随意添加 ...

  8. android radiobutton底部导航,android中Fragment+RadioButton实现底部导航栏

    在App中经常看到这样的tab底部导航栏 那么这种效果是如何实现,实现的方式有很多种,最常见的就是使用Fragment+RadioButton去实现.下面我们来写一个例子 首先我们先在activity ...

  9. 直播商城源码,商城开发实现商城底部导航栏

    直播商城源码,商城开发实现商城底部导航栏 1.先写布局. 我新建了一个ShoppingActivity,在activity_shopping.xml文件中,写整体布局,代码如下: <?xml v ...

最新文章

  1. [记录]使用openGL显示点云的一个程序
  2. RHEL 5.4 安装Oracle 11gR2, 安装篇2
  3. python PyQt5.QtWidgets.QApplication类(sys.argv)(app应用对象类)
  4. 《盗墓笔记》使用的这套技术,让美术可以在场景中任意使用灯光
  5. docker 部署_GitLab CI 自动部署netcore web api 到Docker
  6. UtilSession failed: Prerequisite check CheckSystemSpace space(22288172004) is not availa
  7. 具有Stormpath和Spring Boot的OAuth 2.0令牌管理
  8. 在计算机中描述景物结构形状与外貌,在计算机中通过描述景物的结构、形状与外貌,然后将它绘制成图在屏幕上显示出来,此类图像称为_____。...
  9. [react] React的isMounted有什么作用?
  10. 经典Java编程面试题分析
  11. C#LeetCode刷题之#257-二叉树的所有路径(Binary Tree Paths)
  12. 如何实现复杂FPGA设计的时序收敛
  13. php mysql占位符_php中的占位符
  14. 线性代数学习笔记——第六讲——矩阵的转置
  15. python编译成可执行文件 发布 win_[PYTHON]_ELVE_Python源代码文件编译成可执行文件(支持macOS High Sierra和window 10)...
  16. Webpack 5: The ‘compilation‘ argument must be an instance of Compilation
  17. kalibr_calibrate_cameras 卡在 Extracting calibration target corners
  18. postgres查询序列_PostgreSQL 序列使用
  19. 下载和攻略补遗之人偶遗迹 ひとがたルイン
  20. ORA-01940: cannot drop a user that is currently connected 问题解决

热门文章

  1. 【iOS】iphone 短信标记未读 bug/ 永远清不干净的红点未读提示 /总结四大解决方案,总有N个适合你
  2. Window使用代理下载编译Chromium(Visual Stadio 2019版)
  3. Python中FIR滤波和小波包滤波对比(MNE脑电数据处理)
  4. 5G IMT-2020
  5. 关于帆软软件的js和网页超链接实例
  6. python每次读取2行,如何在python中分别读取两行
  7. 支付宝、腾讯都发了NFT?监管是怎么看的?
  8. [docker] docker-compose安装kafka集群
  9. Google地图下载
  10. 美研制自我复制机器人 10年内吞噬所有沙漠