Android底部导航栏BottomNavigationView

 

 Android底部导航栏BottomNavigationView_第1张图片

fragment_first




    

 FirstFragment

package com.etime.myproject;

import android.content.Context;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

public class FirstFragment extends Fragment {
    private Button mButton;
    private Context mContext;

    public FirstFragment() {

    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // 依据Fragment布局文件生成其对应View
        View view=inflater.inflate(R.layout.fragment_first, container, false);
        // 从View中找到Button
        mButton=(Button)view.findViewById(R.id.button);
        // 为Button设置点击事件
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mContext=getContext();
                Toast.makeText(mContext,"Hello Fragment",Toast.LENGTH_LONG).show();
            }
        });
        //返回FragView的View
        return view;
    }
}

fragment_second.xml




    

SecondFragment 

package com.etime.myproject;

import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import androidx.fragment.app.Fragment;

public class SecondFragment extends Fragment {
    private Button mButton;
    private Context mContext;

    public SecondFragment() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // 依据Fragment布局文件生成其对应View
        View view=inflater.inflate(R.layout.fragment_second, container, false);
        // 从View中找到Button
        mButton=(Button)view.findViewById(R.id.button);
        // 为Button设置点击事件
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mContext=getContext();
                Toast.makeText(mContext,"Hello Fragment",Toast.LENGTH_LONG).show();
            }
        });
        //返回FragView的View
        return view;
    }
}

fragment_third.xml




    

ThirdFragment 

package com.etime.myproject;

import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import androidx.fragment.app.Fragment;

public class ThirdFragment extends Fragment {
    private Button mButton;
    private Context mContext;

    public ThirdFragment() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // 依据Fragment布局文件生成其对应View
        View view=inflater.inflate(R.layout.fragment_third, container, false);
        // 从View中找到Button
        mButton=(Button)view.findViewById(R.id.button);
        // 为Button设置点击事件
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mContext=getContext();
                Toast.makeText(mContext,"Hello Fragment",Toast.LENGTH_LONG).show();
            }
        });
        //返回FragView的View
        return view;
    }
}

build.gradle

Android底部导航栏BottomNavigationView_第2张图片

implementation 'com.google.android.material:material:1.0.0'

 

menu_bottom_tab.xml



    
    
    

 selector_bnv_color.xml



    
    

activity_main.xml





   
   
   

   
   
   

MainActivity
package com.etime.myproject;

import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.bottomnavigation.BottomNavigationView;

/**
 * 注意事项:
 * 1、MainActivity继承自AppCompatActivity
 * 2、与ViewPager相关的东西均在androidx包下
 * 3、添加依赖 implementation 'com.google.android.material:material:1.0.0'
 *    否则无法使用BottomNavigationView
 */
public class MainActivity extends AppCompatActivity {
    private ViewPager mViewPager;
    private Context mContext;
    private BottomNavigationView mBottomNavigationView;
    private NavigationItemSelectedListenerImpl mNavigationItemSelectedListenerImpl;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    public void init(){
        mContext=this;
        mViewPager=(ViewPager) findViewById(R.id.viewPager);
        FragmentManager fragmentManager=getSupportFragmentManager();
        //设置ViewPager的Adapter
        ViewPagerAdapter adapter=new ViewPagerAdapter(fragmentManager,FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
        mViewPager.setAdapter(adapter);
        //设置ViewPager的翻页监听器
        PageChangeListenerImpl listener=new PageChangeListenerImpl();
        mViewPager.addOnPageChangeListener(listener);

        //设置BottomNavigationView导航监听
        mBottomNavigationView=findViewById(R.id.bottomNavigationView);
        mNavigationItemSelectedListenerImpl=new NavigationItemSelectedListenerImpl();
        mBottomNavigationView.setOnNavigationItemSelectedListener(mNavigationItemSelectedListenerImpl);
    }

    //ViewPager适配器ViewPagerAdapter
    private  class ViewPagerAdapter extends FragmentPagerAdapter{
        FirstFragment firstFragment=new FirstFragment();
        SecondFragment secondFragment=new SecondFragment();
        ThirdFragment thirdFragment=new ThirdFragment();
        private Fragment[] fragments = new Fragment[]{firstFragment,secondFragment,thirdFragment};

        public ViewPagerAdapter(@NonNull FragmentManager fm, int behavior) {
            super(fm, behavior);
        }

        @NonNull
        @Override
        public Fragment getItem(int position) {
            return fragments[position];
        }

        @Override
        public int getCount() {
            return fragments.length;
        }
    }

    //ViewPager翻页监听器ViewPager.OnPageChangeListener
    private class PageChangeListenerImpl implements ViewPager.OnPageChangeListener{
        @Override
        public void onPageScrolled(int i, float v, int i1) {

        }

        @Override
        public void onPageSelected(int position) {
            //切换BottomNavigationView相应位置的item的选中状态
            Menu menu=mBottomNavigationView.getMenu();
            MenuItem menuItem = menu.getItem(position);
            menuItem.setChecked(true);
        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    }

    //BottomNavigationView导航监听BottomNavigationView.OnNavigationItemSelectedListener
    private class NavigationItemSelectedListenerImpl implements BottomNavigationView.OnNavigationItemSelectedListener{
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            int itemId = item.getItemId();
            //切换ViewPager的页面
            switch (itemId){
                case R.id.tab_home:
                    mViewPager.setCurrentItem(0);
                    break;
                case R.id.tab_device:
                    mViewPager.setCurrentItem(1);
                    break;
                case R.id.tab_setting:
                    mViewPager.setCurrentItem(2);
                    break;
            }
            return false;
        }
    }

}

 

你可能感兴趣的:(Android核心)