BottomNavigationView+Fragment/RadioGroup+Fragment等多种方式 实现底部导航条

Android 实现底部导航条有多种方式

1BottomNavigationView+Fragment

2RadioGroup+Fragment

3TabHost+Fragment

BottomNavigationView+Fragment  实现

xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   >

    <FrameLayout
        android:id="@+id/content_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/bottomNavigation"
        android:layout_marginBottom="6dp"
        tools:ignore="Suspicious0dp" />
    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:id="@+id/bottomNavigation"
        app:menu="@menu/navigation"
        app:itemTextColor="@drawable/select_text_color"
        app:backgroundTint="@color/white"
        app:labelVisibilityMode="labeled"
        />

</RelativeLayout>

navigation.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:title="@string/home"
        android:icon="@drawable/select_home"
       android:id="@+id/home"
       />
    <item android:title="@string/find"
        android:icon="@drawable/select_home"
        android:id="@+id/find"
        />
    <item android:title="@string/shop"
        android:icon="@drawable/select_home"
        android:id="@+id/shop"
        />
    <item android:title="@string/person"
        android:icon="@drawable/select_home"
        android:id="@+id/person"
        />
</menu>

selecter

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#FF0000" />
    <item android:state_focused="true" android:color="#FF0000" />
    <item  android:state_checked="true" android:color="#FF0000"/>
    <item android:color="#0000FF" />
</selector>

java  代码

package com.coderxl.ltd.Ui.Activity;

import android.os.Bundle;
import android.view.MenuItem;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;

import com.coderxl.ltd.R;
import com.coderxl.ltd.Ui.Fragment.BaseFragment;
import com.coderxl.ltd.Ui.Fragment.HomeFragment;
import com.coderxl.ltd.Ui.Fragment.SearFragment;
import com.google.android.material.bottomnavigation.BottomNavigationView;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

public class TwoActivity extends AppCompatActivity {

    @BindView(R.id.bottomNavigation)
    BottomNavigationView bottomNavigation;
    private List<BaseFragment> mflist = null;
    private int Currnt_Postion=0;
    private Fragment tempFragment;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);
        ButterKnife.bind(this);
        bottomNavigation.setItemIconTintList(null);
        initFragment();
        initLisner();
    }

    private void initLisner() {
        bottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()){
                      case R.id.home:
                          Currnt_Postion=0;
                          break;
                    case R.id.find:
                        Currnt_Postion=1;
                        break;
                  }
                BaseFragment fragment = getFragment(Currnt_Postion);
                switchUi(tempFragment,fragment);
                return true;
            }
        });
        bottomNavigation.setSelectedItemId(R.id.home);
    }

    private void initFragment() {
        mflist = new ArrayList<>();
        mflist.add(new HomeFragment());
        mflist.add(new SearFragment());
    }
    private BaseFragment getFragment(int currnt_Postion) {
        BaseFragment baseFragment = mflist.get(currnt_Postion);
        return baseFragment;
    }


    private void switchUi(Fragment fromFragment, BaseFragment nextfragment) {
        if(tempFragment!=nextfragment){
            tempFragment=nextfragment;
            if(nextfragment!=null){
                FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                if(!nextfragment.isAdded()){
                    if(fromFragment!=null){
                        fragmentTransaction.hide(fromFragment);
                    }
                    fragmentTransaction.add(R.id.content_main,nextfragment).commit();
                }else{
                    if(fromFragment!=null){
                        fragmentTransaction.hide(fromFragment);
                    }
                    fragmentTransaction.show(nextfragment).commit();
                }
            }
        }

    }
}

RadioGroup+Fragment

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <FrameLayout
        android:id="@+id/content_main"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        tools:ignore="Suspicious0dp"
        android:layout_weight="1"
          />
    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:orientation="horizontal"
        android:id="@+id/rg"
        >
       <RadioButton

           android:id="@+id/home"
           android:gravity="center"
           android:text="首页"
           android:button="@null"
           android:layout_width="match_parent"
           android:layout_weight="1"
           android:layout_height="match_parent"
           />
        <RadioButton
            android:textColor="@drawable/select_text_color"
            android:drawableTop="@drawable/select_home"
            android:id="@+id/find"
            android:layout_marginTop="5dp"
            android:drawablePadding="2dp"
            android:gravity="center"
            android:text="发现"
            android:button="@null"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:layout_height="match_parent"
            />
        <RadioButton
            android:id="@+id/shop"
            android:text="商城"
            android:button="@null"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:gravity="center"
            />
        <RadioButton
            android:text="个人"
            android:button="@null"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:gravity="center"
            android:id="@+id/person"
            />

    </RadioGroup>
</LinearLayout>

java代码

package com.coderxl.ltd;

import android.os.Bundle;
import android.widget.FrameLayout;
import android.widget.RadioGroup;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;

import com.coderxl.ltd.Ui.Fragment.BaseFragment;
import com.coderxl.ltd.Ui.Fragment.HomeFragment;
import com.coderxl.ltd.Ui.Fragment.SearFragment;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity {
    @BindView(R.id.content_main)
    FrameLayout contentMain;
    @BindView(R.id.rg)
    RadioGroup rg;
    private List<BaseFragment> mflist = null;
    private int Currnt_Postion=0;
    private Fragment tempFragment;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        initFragment();
        initListner();
        rg.check(R.id.home);
    }

    private void initListner() {

        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId){
                      case R.id.home:
                          Currnt_Postion=0;
                          break;
                    case R.id.find:
                        Currnt_Postion=1;
                        break;
                    case R.id.shop:
                        Currnt_Postion=2;
                        break;
                    case R.id.person:
                        Currnt_Postion=3;
                        break;
                };
                BaseFragment fragment = getFragment(Currnt_Postion);
                switchUi(tempFragment,fragment);
            }
        });

    }

    private void switchUi(Fragment fromFragment, BaseFragment nextfragment) {
                   if(tempFragment!=nextfragment){
                       tempFragment=nextfragment;
                       if(nextfragment!=null){
                           FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                           if(!nextfragment.isAdded()){
                                if(fromFragment!=null){
                                    fragmentTransaction.hide(fromFragment);
                                }
                                fragmentTransaction.add(R.id.content_main,nextfragment).commit();
                           }else{
                               if(fromFragment!=null){
                                   fragmentTransaction.hide(fromFragment);
                               }
                               fragmentTransaction.show(nextfragment).commit();
                           }
                       }
                   }

    }

    private BaseFragment getFragment(int currnt_Postion) {
        BaseFragment baseFragment = mflist.get(currnt_Postion);
        return baseFragment;
    }

    private void initFragment() {
        mflist = new ArrayList<>();
        mflist.add(new HomeFragment());
        mflist.add(new SearFragment());
    }
}
发布了113 篇原创文章 · 获赞 120 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/xueshao110/article/details/104771079