android中Fragment+RadioButton实现底部导航栏

底部导航栏在Android应用中非常常见,利用Fragment+RadioButton可以轻松实现这个效果。下面是详细的步骤:

1. 布局文件

首先,在主布局文件中添加FrameLayout来放置Fragment。

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

然后,添加RadioButton作为菜单,放在一个RadioGroup中。

<RadioGroup
    android:id="@+id/menu_rg"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="#fff"
    android:gravity="center">

    <RadioButton
        android:id="@+id/menu_home"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableTop="@drawable/ic_home"
        android:text="@string/menu_home"/>

    <RadioButton
        android:id="@+id/menu_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableTop="@drawable/ic_message"
        android:text="@string/menu_message"/>

    <RadioButton
        android:id="@+id/menu_mine"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableTop="@drawable/ic_mine"
        android:text="@string/menu_mine"/>

</RadioGroup>

2. 创建Fragment

在应用中添加对应的Fragment,如下:

public class HomeFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_home, container, false);
        return view;
    }
}

把各个Fragment类中的视图元素放的每个Fragment的对应布局文件中。

3. 实现底部导航栏

在activity中实现底部导航栏,用一个FragmentTransaction来管理,然后使用RadioButton与Fragment来替换FrameLayout中的布局(即添加Fragment到FrameLayout中)。

public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener{

    private RadioGroup mRadioGroup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mRadioGroup = (RadioGroup) findViewById(R.id.menu_rg);
        mRadioGroup.setOnCheckedChangeListener(this);
        RadioButton radioButton = (RadioButton) mRadioGroup.findViewById(R.id.menu_home);
        radioButton.setChecked(true);

        //设置默认的Fragment
        getSupportFragmentManager().beginTransaction().replace(R.id.container, new HomeFragment()).commit();
    }

    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int i) {
        Fragment fragment = null;
        switch (i) {
            case R.id.menu_home:
                fragment = new HomeFragment();
                break;
            case R.id.menu_message:
                fragment = new MessageFragment();
                break;
            case R.id.menu_mine:
                fragment = new MineFragment();
                break;
        }
        if (fragment != null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment).commit();
        }
    }
}

这样,当用户点击了底部导航按钮,就会切换到对应的Fragment。

注意:RadioButton的选中状态应该在activity的onCreate中设定默认值,避免程序崩溃。同时,根据应用的需求可以自定义RadioButton的样式。

示例1:以GitHub的Android客户端app为例,实现底部导航栏。具体实现效果你可以参考官方项目 https://github.com/github/android 。

示例2:以博客园的Android客户端app为例,实现底部导航栏。具体实现效果你可以参考开源项目 https://github.com/ccj659/Cnblogs-Android 。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android中Fragment+RadioButton实现底部导航栏 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • Spring MVC 框架搭建配置方法及详解

    Spring MVC 框架搭建配置方法及详解 Spring MVC是一种基于Java的Web框架,它提供了许多便捷的功能和工具,使得开发者可以更加高效地开发Web应用程序。本文将详细讲解如何在Spring MVC中搭建配置框架,并提供两个示例来说明如何实现这一过程。 步骤一:创建Spring MVC项目 在开始使用Spring MVC搭建配置框架之前,我们需…

    Java 2023年5月17日
    00
  • HTTP头部信息解释分析(详细整理)

    HTTP头部信息是客户端请求和服务器响应的重要组成部分,它包含了一些重要的元数据,比如用户代理信息、请求响应方式、字符编码、缓存控制等等。正确理解和解析HTTP头部信息对于开发人员来说至关重要,本文将详细整理HTTP头部信息解释分析的攻略,下面是具体内容: HTTP头部信息解释分析攻略 了解HTTP头部信息的基本概念 在开始分析HTTP头部信息之前,需要对H…

    Java 2023年6月15日
    00
  • Java NegativeArraySizeException异常解决方案

    我将为您讲解解决“Java NegativeArraySizeException异常”的完整攻略。 什么是NegativeArraySizeException异常? 首先,我们需要了解一下NegativeArraySizeException异常。它是Java中的一种运行时异常,当我们使用负数作为数组大小时,就会抛出这个异常。 解决方案 要解决Negative…

    Java 2023年5月27日
    00
  • java实现登录验证码

    下面是“java实现登录验证码”的完整攻略。 简介 验证码是一种防止网站被机器人攻击的常用手段,它需要用户正确地输入由图片或数字组成的随机字符串。本文将介绍如何在Java中实现登录验证码功能。 步骤 生成验证码图片。 在使用Java实现验证码时,可以使用第三方库或自己编写代码生成验证码图片。其中,常用的第三方库包括JCaptcha和Kaptcha等。这里以K…

    Java 2023年5月19日
    00
  • spring MVC中传递对象参数示例详解

    在 Spring MVC 中,我们可以通过多种方式传递参数,其中包括传递对象参数。本文将详细讲解 Spring MVC 中传递对象参数示例详解,包括如何定义对象、如何传递对象参数、如何接收对象参数等。 定义对象 在 Spring MVC 中,我们可以通过定义一个 POJO(Plain Old Java Object)类来表示一个对象。下面是一个简单的示例,演…

    Java 2023年5月18日
    00
  • Java 基础语法

    Java 基础语法 Java 是一种广泛使用的编程语言,本文将向您介绍 Java 的基础语法。 数据类型 Java 中的数据类型分为两类:基本数据类型和引用数据类型。 基本数据类型 数据类型 描述 byte 字节数据类型。在存储空间上占据 1 个字节。 short 短整型数据类型。在存储空间上占据 2 个字节。 int 整型数据类型。在存储空间上占据 4 个…

    Java 2023年5月19日
    00
  • SpringBoot实现快递物流查询功能(快递鸟)

    这个话题非常适合以Markdown格式来进行讲解。下面按照以下结构展开讲解: SpringBoot实现快递物流查询功能(快递鸟) 一、前置知识 在开始使用SpringBoot实现快递物流查询功能之前,我们需要先了解以下技术: Spring Boot:Spring框架的一个子项目,可以帮助我们快速构建Spring应用程序 快递鸟API:一款提供快递物流查询的第…

    Java 2023年5月20日
    00
  • 详解Reactor如何优雅Exception异常处理

    详解Reactor如何优雅Exception异常处理 在使用Reactor进行响应式编程的过程中,异常处理是一个非常重要的部分。优雅地处理异常,可以让代码更加健壮和可靠。本文将详细讲解Reactor如何优雅地处理异常。 直接捕获异常 Reactor提供了onError方法来处理异常。当流中出现异常时,可以直接调用onError方法来捕获异常。 Flux.ju…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部