安卓学习--利用RadioButton实现底部导航栏

这篇博客介绍了如何在安卓应用中利用RadioButton组件实现底部导航栏功能。首先,通过在布局文件中设置RadioGroup和RadioButton,利用weight属性调整各选项的比例,并添加FrameLayout作为内容区域。接着,创建多个Fragment并编写changemainFragment()方法,监听底部导航的改变,通过FragmentTransaction的hide和show方法来实现场景切换。最后展示了实现后的界面效果。

目标:利用RadioButton实现底部导航栏

简介:底部导航栏是现在大部分app都会用到的功能
它帮助用户可以通过导航在不同界面自由切换

实现过程

步骤1:编写布局文件
用RadioGroup和RadioButton完成导航栏的布局
用weight属性来控制所占比例
图片用系统所自带的一些图片
准备一定空间放置FrameLayout用于之后跳转

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

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:orientation="vertical">
    <FrameLayout
        android:id="@+id/main_Frame"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">
    </FrameLayout>
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/spe"/>
    <RadioGroup
        android:id="@+id/main_menu"
        android:background="@color/menu"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <RadioButton
            android:id="@+id/RB_discover"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:button="@null"
            android:checked="true"
            android:drawableTop="@drawable/main_menu_discover"
            android:drawableTint="@drawable/menu_color"
            android:gravity="center"
            android:text="@string/main_menu_discover"
            />
        <RadioButton
            android:id="@+id/RB_train"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:button="@null"
            android:drawableTop="@drawable/main_menu_train"
            android:drawableTint="@drawable/menu_color"
            android:gravity="center"
            android:text="@string/main_menu_train"
            />

        <RadioButton
            android:id="@+id/RB_social"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:button="@null"
            android:drawableTop="@drawable/main_menu_social"
            android:drawableTint="@drawable/menu_color"
            android:gravity="center"
            android:text="@string/main_menu_social"
            />

        <RadioButton
            android:id="@+id/RB_me"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:button="@null"
            android:drawableTop="@drawable/main_menu_me"
            android:drawableTint="@drawable/menu_color"
            android:gravity="center"
            android:text="@string/main_menu_me"
            />
    </RadioGroup>





</LinearLayout>

编写完布局文件可以达到以下界面
界面

步骤2:编写代码实现界面跳转
1:创建4个fragment用于跳转不同界面
2:编写changemainFragment()方法监听底部导航变换时使用
3:利用FragmentTransaction的hide方法来隐藏界面,show方法来显示界面

public class MainActivity extends AppCompatActivity {

    private RadioGroup mainmenu;
    private MeFragment mMeFragment;
    private Discover_Fragment mDiscover_fragment;
    private SocialFragment mSocialFragment;
    private TrainFragment mTrainFragment;

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

        //底部导航监听
        changemainFragment(R.id.RB_discover);
        mainmenu = (RadioGroup) findViewById(R.id.main_menu);
        mainmenu.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                changemainFragment(checkedId);
            }
        });

    }


    public void hideAllFragment(FragmentTransaction transaction){
        if(mSocialFragment!=null){
            transaction.hide(mSocialFragment);
        }
        if(mTrainFragment!=null){
            transaction.hide(mTrainFragment);
        }
        if(mDiscover_fragment!=null){
            transaction.hide(mDiscover_fragment);
        }
        if(mMeFragment!=null){
            transaction.hide(mMeFragment);
        }
    }


    /***
     * 切换主fragment
     * 
     */
    public void changemainFragment(int checkedId) {
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        hideAllFragment(fragmentTransaction);
        switch (checkedId) {
            case R.id.RB_discover: {
                if(mDiscover_fragment == null) {
                    mDiscover_fragment = new Discover_Fragment();
                    fragmentTransaction.add(R.id.main_Frame, mDiscover_fragment);

                }
                else {
                    fragmentTransaction.show(mDiscover_fragment);
                }
                break;

            }
            case R.id.RB_me: {
                if(mMeFragment == null) {
                    mMeFragment = new MeFragment();
                    fragmentTransaction.add(R.id.main_Frame, mMeFragment);
                }
                else {
                    fragmentTransaction.show(mMeFragment);
                }
                break;

            }
            case R.id.RB_social: {
                if(mSocialFragment == null) {
                    mSocialFragment = new SocialFragment();
                    fragmentTransaction.add(R.id.main_Frame, mSocialFragment);

                }
                else {
                    fragmentTransaction.show(mSocialFragment);
                }

                break;

            }
            case R.id.RB_train: {
                if(mTrainFragment == null) {
                    mTrainFragment = new TrainFragment();
                    fragmentTransaction.add(R.id.main_Frame, mTrainFragment);
                }
                else {
                    fragmentTransaction.show(mTrainFragment);
                }
                break;

            }

        }
        fragmentTransaction.commit();
    }


}

最终效果截图(跳转显示的fragment为随意练手用的界面)

这里写图片描述

社区

在C语言里,位左对齐右对齐一般在格式化输出时会用到,主要用于控制数据在输出时的位置。以下是相关介绍: ### 整型数据的左对齐右对齐 通过`printf`函数实现整型数据的左对齐右对齐右对齐是默认方式,在格式说明符`%`和`d`之间添加数字来规定输出宽度,若数字位数小于规定宽度,会在左边补空格;左对齐则需在数字前加`-`号,若数字位数小于规定宽度,会在右边补空格。 示例代码如下: ```c #include <stdio.h> int main() { // 右对齐。数字宽度为10,若不足10,在左边补足空格 printf("%10d\n", 1234); // 左对齐。数字宽度为10,若不足10,在右边补足空格 printf("%-10d\n", 1234); return 0; } ``` ### 不同输出长度的情况 当规定的输出宽度和数字实际位数不同时,有不同的处理方式。若规定宽度小于数字实际位数,会完整输出数字;若规定宽度大于数字实际位数,右对齐在左边补空格,左对齐在右边补空格。 示例代码如下: ```c #include <stdio.h> int main() { // -5是左对齐,输出长度为5。5是右对齐,输出长度为5 printf("%-5d %5d\n", 455, 455); printf("%-5d %5d\n", -123, -123); // 规定宽度小于实际位数,完整输出数字 printf("%-5d %5d\n", 987654, 987654); return 0; } ``` ### 其他数据类型的对齐 除整型外,其他数据类型也能实现左对齐右对齐。例如浮点数(`%f`)、字符串(`%s`)等,方法和整型一致。 示例代码如下: ```c #include <stdio.h> int main() { // 右对齐浮点数,宽度为10 printf("%10f\n", 3.14); // 左对齐浮点数,宽度为10 printf("%-10f\n", 3.14); // 右对齐字符串,宽度为10 printf("%10s\n", "hello"); // 左对齐字符串,宽度为10 printf("%-10s\n", "hello"); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值