【Android】 底部导航开发,只需要六步

Android 底部导航开发

方法1-Fragment

第一步,创建底部导航对应的页面

我们创建三个,所以需要三个对应的页面 在layout中新建xml文件 tab_bar_home_fragment.xml

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">  
    <TextView  
    android:id="@+id/fu_tv1"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_gravity="center_horizontal"  
    android:layout_marginTop="50dp"  
    android:text="首页"  
    android:textSize="24sp" />  
</LinearLayout>

按照这种方式再新建两个文件,分别为tab_bar_transmit_fragment.xml, tab_bar_user_fragment.xml

第二步,创建页面对应的java Fragment文件

新建java文件 HomeFragment.java

java 复制代码
package com.hxtx.august.NavFragment;  
import android.os.Bundle;  
import android.view.LayoutInflater;  
import android.view.View;  
import android.view.ViewGroup;  
import androidx.annotation.Nullable;  
import androidx.fragment.app.Fragment;  
import com.hxtx.august.R;  
public class HomeFragment extends Fragment {  
    @Nullable  
    @Override  
    public View onCreateView(@Nullable LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState){  
        return inflater.inflate(R.layout.tab_bar_home_fragment,container,false);  
    }  
}

按照这种方式再新建两个文件,分别为TransmitFragment.java, UserFragment.java 文件

第四步 创建底部按钮的变化状态

drawable中新建xml文件,tab_bar_home_selector.xml

注意:tab_icon_home2是我准备好的png图片,也可以使用自带的xml,tab_icon_home2表示点击后的图标,tab_icon_home1表示未点击的图标

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>  
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
    <!-- 按下此item-->  
    <item android:drawable="@mipmap/tab_icon_home2" android:state_checked="true" />  
    <!-- 默认为此item-->  
    <item android:drawable="@mipmap/tab_icon_home1" android:state_checked="false" />  
</selector>

按照这种方式再新建两个文件,分别为tab_bar_transmit_selector.xml, tab_bar_user_selector.xml 文件

到此为止,我们的准备工作结束,开始开发底部导航。

第五步,在MainActivity对应的xml中这样布局

activity_main.xml

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">  

    <FrameLayout  
        android:id="@+id/ant_frame_layout"  
        android:layout_width="match_parent"  
        android:layout_height="0dp"  
        android:layout_weight="1"  
    />  
    <RadioGroup  
        android:id="@+id/ans_radio_group"  
        android:layout_width="match_parent"  
        android:layout_height="55dp"  
        android:paddingTop="5dp"  
        android:layout_gravity="center_vertical"  
        android:orientation="horizontal"  
    >  
        <RadioButton  
            android:id="@+id/tab_bar_home_id"  
            android:layout_width="0dp"  
            android:layout_height="match_parent"  
            android:layout_weight="1"  
            android:button="@null"  
            android:checked="true"  
            android:drawableTop="@drawable/tab_bar_home_selector"  
            android:drawablePadding="3dp"  
            android:gravity="center"  
            android:text="首页"  
        />  
        <RadioButton  
            android:id="@+id/tab_bar_transmit_id"  
            android:layout_width="0dp"  
            android:layout_height="match_parent"  
            android:layout_weight="1"  
            android:button="@null"  
            android:checked="false"  
            android:drawableTop="@drawable/tab_bar_transmit_selector"  
            android:drawablePadding="3dp"  
            android:gravity="center"  
            android:text="新闻"  
        />  
        <RadioButton  
            android:id="@+id/tab_bar_cloud_id"  
            android:layout_width="0dp"  
            android:layout_height="match_parent"  
            android:layout_weight="1"  
            android:button="@null"  
            android:checked="false"  
            android:drawableTop="@drawable/tab_bar_cloud_selector"  
            android:drawablePadding="3dp"  
            android:gravity="center"  
            android:text="公告"  
        />  
        <RadioButton  
            android:id="@+id/tab_bar_connect_id"  
            android:layout_width="0dp"  
            android:layout_height="match_parent"  
            android:layout_weight="1"  
            android:button="@null"  
            android:checked="false"  
            android:drawableTop="@drawable/tab_bar_connect_selector"  
            android:drawablePadding="3dp"  
            android:gravity="center"  
            android:text="我的"  
        />  
        <RadioButton  
            android:id="@+id/tab_bar_user_id"  
            android:layout_width="0dp"  
            android:layout_height="match_parent"  
            android:layout_weight="1"  
            android:button="@null"  
            android:checked="false"  
            android:drawableTop="@drawable/tab_bar_user_selector"  
            android:drawablePadding="3dp"  
            android:gravity="center"  
            android:text="我的"  
        />  
    </RadioGroup>  
</LinearLayout>

第六步,在MainActivity文件入口加入以下代码

MainActivity.java

java 复制代码
package com.hxtx.august;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
import android.widget.FrameLayout;
import android.widget.RadioGroup;
import com.hxtx.august.NavFragment.ConnectFragment;
import com.hxtx.august.NavFragment.HomeFragment;
import com.hxtx.august.NavFragment.TransmitFragment;
import com.hxtx.august.NavFragment.CloudFragment;
import com.hxtx.august.NavFragment.UserFragment;
import android.content.Intent;
import android.content.IntentFilter;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import com.hxtx.august.Page.QrCodeCManagePage;
import com.hxtx.august.Components.MessageDialog;
import com.hxtx.august.Tools.Utils;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;

public class MainActivity extends AppCompatActivity {
    private FrameLayout antFrameLayout;
    private RadioGroup ansRadioGroup;
    private Fragment mCurrFragment;
    private HomeFragment homeFragment;
    private CloudFragment cloudFragment;
    private TransmitFragment transmitFragment;
    private ConnectFragment connectFragment;
    private UserFragment userFragment;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        selectPage(0);
    }

    private void initView(){
        antFrameLayout = findViewById(R.id.ant_frame_layout);
        ansRadioGroup = findViewById(R.id.ans_radio_group);
        ansRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                selectPage(ansRadioGroup.indexOfChild((ansRadioGroup.findViewById(checkedId))));
            }
        });
    }

    private void selectPage(int index){
        switch (index){
            case 0:
                if(homeFragment == null){
                    homeFragment = new HomeFragment();
                }
                changeFragment(homeFragment);
                break;
            case 1:
                if(transmitFragment == null){
                    transmitFragment = new TransmitFragment();
                }
                changeFragment(transmitFragment);
                break;
            case 2:
                if(cloudFragment == null){
                    cloudFragment = new CloudFragment();
                }
                changeFragment(cloudFragment);
                break;
            case 3:
                if(connectFragment == null){
                    connectFragment = new ConnectFragment();
                }
                changeFragment(connectFragment);
                break;
            case 4:
                if(userFragment == null){
                    userFragment = new UserFragment();
                }
                changeFragment(userFragment);
                break;
        }
    }

    private void changeFragment(Fragment showFragment){
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft =  fm.beginTransaction();
        if(!showFragment.isAdded()){
            ft.add(R.id.ant_frame_layout,showFragment);
        }
        if(mCurrFragment !=null){
            ft.hide(mCurrFragment);
        }
        mCurrFragment = showFragment;
        ft.show(mCurrFragment);
        ft.commit();
    }
}

好了,布局完成。可以使用了

相关推荐
從南走到北35 分钟前
JAVA国际版二手车交易二手车市场系统源码支持Android+IOS+H5+APP
android·java·ios
江上清风山间明月41 分钟前
Android 系统中进程和线程的区别
android·python·线程·进程
2501_940094022 小时前
mig烧录卡资源 Mig-Switch游戏合集 烧录卡 1.75T
android·游戏·安卓·switch
渡我白衣2 小时前
深入理解 OverlayFS:用分层的方式重新组织 Linux 文件系统
android·java·linux·运维·服务器·开发语言·人工智能
2501_915106322 小时前
iOS性能调优的系统化实践,从架构分层到多工具协同的全流程优化指南(开发者深度版)
android·ios·小程序·架构·uni-app·iphone·webview
stevenzqzq3 小时前
android recyclerview缓存_缓存问题解决办法
android·java·缓存
下位子3 小时前
『OpenGL学习滤镜相机』- Day10: 相机预览与 OpenGL 结合
android·opengl
那就逆流而上吧3 小时前
Android AIDL 的详细讲解和实践指南
android
TDengine (老段)5 小时前
TDengine 字符串函数 POSITION 用户手册
android·java·大数据·数据库·物联网·时序数据库·tdengine
2501_937154936 小时前
神马影视 8.8 源码 2025 版,HDR + 杜比音效 + 零卡顿
android·源码·源代码管理·机顶盒