Android Studio 的抽屉导航

Android的抽屉导航:

文件夹布局:

layout布局文件夹:
activity_main.xml 主入口文件
app_bar_main.xml 主内容文件:viewPager为多个页面,可以滑动,也可以对应抽屉的导航
nav_header_main 抽屉的头部
page1.xml
page2.xml
page3.xml

menu菜单文件夹
activity_main_drawer 抽屉的菜单导航

values文件夹
strings.xml内容就直接写:

    我的抽屉
    Settings
    Open navigation drawer
    Close navigation drawer

 

1. 主要视图:activity_main.xml文件



    

    

2. app_bar_main.xml 文件为内容


    
            

                

            
            
                    
                         
                    
            
    
3.activity_main_drawer.xml 抽屉导航



    
        
        
        
       
    

    
        
            
                
                
            
                
                
        
    


主入口java:mainactivity.java

 

import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private NavigationView mNavView;     ////  抽屉的导航菜单
    private MenuItem mNavFile;
    private DrawerLayout drawerLayout;   ////  抽屉外壳
    private ViewPager mViewPager;        ////  视图
    private List views;           ////  视图总和

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);  // 主入口布局
        initView();
    }
    private void initView() {
        //// 抽屉
        mNavView = (NavigationView) findViewById(R.id.nav_view);      // 导航
        drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);  // 抽屉
        setNavItemListener();  // 设置导航监听事件

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);   // 头部
        setSupportActionBar(toolbar);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawerLayout, toolbar, R.string.navigation_drawer_open,             R.string.navigation_drawer_close);
        drawerLayout.setDrawerListener(toggle);
        toggle.syncState();       ///  控制抽屉的显示隐藏

        views = new ArrayList();        ////  页面集合
        LayoutInflater mLi = LayoutInflater.from(this);
        View view1 = mLi.inflate(R.layout.page1, null);
        views.add(view1);
        View view2 = mLi.inflate(R.layout.page2, null);
        views.add(view2);
        View view3 = mLi.inflate(R.layout.page3, null);
        views.add(view3);

        mViewPager = (ViewPager) findViewById(R.id.viewPager);   ///  分页视图的框架
        MyPagerAdapter adapter = new MyPagerAdapter();
        mViewPager.setAdapter(adapter);     /// 设置适配器
        mViewPager.setCurrentItem(0);      /// 设置初始页面
        mViewPager.setOffscreenPageLimit(3);   /// 设置缓存页面后,可以获取缓存页面的btn

        ///  监听视图框滑动事件:
        mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {
                if (position == 0) {
                    LogSdk.v("zdf .......滑动到:" + position);
                    mNavView.setCheckedItem(R.id.nav_1);  // 视图滑动同时导航也要匹配
                } else if (position == 1) {
                    mNavView.setCheckedItem(R.id.nav_1);  // 视图滑动同时导航也要匹配
                } else if (position == 2) {
                    mNavView.setCheckedItem(R.id.nav_1);  // 视图滑动同时导航也要匹配
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
    }
    //// 抽屉导航item 点击事件监听
    private void setNavItemListener() {
        mNavView.setCheckedItem(R.id.nav_1);  // 初始选中
        mNavView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                // 当前导航被选中:
                item.setChecked(true);
                drawerLayout.closeDrawers(); //// 关闭导航菜单
                if (item.getItemId() == R.id.nav_1) {
                    mViewPager.setCurrentItem(0);  // 对应的视图切换
                } else if (item.getItemId() == R.id.nav_2) {
                    mViewPager.setCurrentItem(1);
                } else if (item.getItemId() == R.id.nav_3) {
                    mViewPager.setCurrentItem(2);
                }
                return true;
            }
        });
    }
    // 创建viewPager的适配器
    class MyPagerAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            // 返回要滑动的VIew的个数
            // TODO Auto-generated method stub
            return views.size();
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            // TODO Auto-generated method stub
            return arg0 == arg1;    //这行代码很重要,它用于判断你当前要显示的页面
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            // 第一:将当前视图添加到container中,第二:返回当前View
            container.addView(views.get(position));
            //  找到页面的btn
            if (position == 0) {
                initPageOne();   // 在适配器里面去获取响应的页面的id  
            } else if (position == 1) {
            } else if (position == 2) {
            }
            return views.get(position);
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // 从当前container中删除指定位置(position)的View;
            container.removeView(views.get(position));
        }


    }



}

 

 

 

 

 

你可能感兴趣的:(Android Studio 的抽屉导航)