1. 程式人生 > >安卓學習--利用RadioButton實現底部導航欄

安卓學習--利用RadioButton實現底部導航欄

目標:利用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為隨意練手用的介面)

這裡寫圖片描述

社群