美文网首页
android 底部菜单 BottomNavigationVie

android 底部菜单 BottomNavigationVie

作者: 余长生 | 来源:发表于2019-11-16 16:55 被阅读0次

编译版本在21及以上
第一步、创建三个Fragment 自己自定义命名
HomeFragment

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.ms.lemonnote.R;
public class HomeFragment extends Fragment {
    private static final String TAG = "HomeFragment";
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.home_fragment, null);
    }

}

fragment_home.xml

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="35sp"
        android:layout_centerInParent="true"
        android:text="HOME"/>
</RelativeLayout>

FindFragMent、 MineFragment 和HomeFragment 一样

第二、在res资源文件下,创建menu资源文件并在其目录下面创建bottom_menu.xml,注意个数不能超过5个否则会报错

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/navigation_home"
        android:title="首页" />
    <item
        android:id="@+id/navigation_find"
        android:title="发现" />
    <item
        android:id="@+id/navigation_mine"
        android:title="我的" />
</menu>

第三、创建MainActivity

... 省略引用
public class MainActivity extends AppCompatActivity {

    BottomNavigationView bottomNavigationView = null;
    private List<Fragment> mFragments;
    private Fragment mCurrFragment;
    private HomeFragment homeFragment;
    private MineFragment mineFragment;
    private FindFragment findFragment;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bottomNavigationView = findViewById(R.id.navigation);

        // ===============底部菜单 第一种  BottomNavigationView+Fragment start===================================

        //初始化Fragment及底部导航栏
        initFragments(savedInstanceState);
        bottomNavigationView.setOnNavigationItemSelectedListener(item -> onTabItemSelected(item.getItemId()));

        // ===============底部菜单 第一种  BottomNavigationView+Fragment end===================================


    }

    private void switchFragment(Fragment targetFragment) {
        FragmentTransaction transaction = getSupportFragmentManager()
                .beginTransaction();
        if (!targetFragment.isAdded()) {
            //第一次使用switchFragment()时currentFragment为null,所以要判断一下
            if (mCurrFragment != null) {
                transaction.hide(mCurrFragment);
            }
            transaction.add(R.id.fragment_container, targetFragment, targetFragment.getClass().getName());

        } else {
            transaction
                    .hide(mCurrFragment)
                    .show(targetFragment);
        }
        mCurrFragment = targetFragment;
        transaction.commit();
    }

    private boolean onTabItemSelected(int id) {
        Fragment fragment = null;
        switch (id) {
            case R.id.navigation_home: 
                fragment = mFragments.get(0);
                break;
            case R.id.navigation_find:
                fragment = mFragments.get(1);
                break;
            case R.id.navigation_mine:
                fragment = mFragments.get(2);
                break;
            default:
                break;
        }
        if(fragment == null) {
            return false;
        }
        switchFragment(fragment);
        return true;
    }




    private void initFragments(Bundle savedInstanceState) {
        if (savedInstanceState == null) {
            homeFragment = new HomeFragment();
            findFragment = new FindFragment();
            mineFragment = new MineFragment();

            mFragments = new ArrayList<>(3);
            mFragments.add(homeFragment);
            mFragments.add(findFragment);
            mFragments.add(mineFragment);
            mCurrFragment = homeFragment;
            getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.fragment_container, homeFragment)
                    .commit();
        }
    }
}


activity_main.xml

<?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/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </FrameLayout>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="#fcfcfc"
        app:itemIconTint="@color/colorPrimaryDark"
        app:itemTextColor="@color/colorAccent"
        app:menu="@menu/bottom_menu"
        app:labelVisibilityMode="labeled"/>
</LinearLayout>

相关文章

网友评论

      本文标题:android 底部菜单 BottomNavigationVie

      本文链接:https://www.haomeiwen.com/subject/umvyictx.html