DrawerLayout简单实用(内嵌ViewPager与TabLayout)

DrawerLayoutSupport Library包中实现了侧滑菜单效果的控件,可以说drawerLayout是因为第三方控件如MenuDrawer等的出现之后,google借鉴而出现的产物。drawerLayout分为侧边菜单和主内容区两部分,侧边菜单可以根据手势展开与隐藏(drawerLayout自身特性),主内容区的内容可以随着菜单的点击而变化

直接进入正题(代码),边上传代码边解释:(实现一个简单的DrawerLayout)

 


上面这是简单的效果;

下面代码实现:

首先是整个实现的思路:(非常详细)

//整个思路:
* 1.完成项目XML布局
* a.把根布局DrawerLayout,
* b.写两个直接的子控件,一个LL,FG(注意添加到左边的参数,class是Fragment路径)
* c.TabLayout(依赖)控件和ViewPager
*

* 2.初始化控件(注意:这里是TabLayout,不是tableLayout.会报强类型转换异常)
*

* 3.初始化ActionBar
* a.获取一个ActionBar对象
* b.给ActionBar设置图片
* C.ActionBar关联DrawerLayout
* d.DrawerLayout关联ActionBar
*

* 4.初始化ViewPager
* a.创建一个装Fragment的集合
* b.创建Fragment,把Fragment添加到容器中
* c.创建VIewPager的适配器和设置适配器的逻辑
*

* 4.使两两之间相关联.
* a.tabLayout创建指示器
* b.使用TabLayout与VIewPager相关联
* c.给TabLayout指示器设置文本
一:布局  activity_main


    
        
        
    
  
 
布局 fragment_blank



    
    

//这里需要注意的是fagment布局需要设置颜色,能显示出来

下来是代码

MainActivity

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;

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

public class MainActivity extends AppCompatActivity {

    private DrawerLayout drawerLayout;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private ActionBarDrawerToggle toggle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        initView();
        //初始化ActionBar
        initActionBar();
        //初始化ViewPager;
        initViewPaget();
    }
    //初始化ViewPager;
    private void initViewPaget() {
        //首先创建一个集合来装Fragment
        List fragments=new ArrayList<>();
        //创建两个Fragment装入集合
        fragments.add(new Fragment01());
        fragments.add(new Fragment02());
        //创建ViewPager适配器
         MyAdapter adapter=new MyAdapter(getSupportFragmentManager());
        //吧集合放入适配器
        adapter.setMfragments(fragments);
        //给ViewPager设置适配器
        viewPager.setAdapter(adapter);
        //////////////tabLayout/////////////
        //tabLayout指示器有几个就创建几个
        for (int i = 0; i < fragments.size(); i++) {
            tabLayout.addTab(tabLayout.newTab());
        }
        //使tabLayout与ViewPager关联
        tabLayout.setupWithViewPager(viewPager);
        //给tabLayout设置文本信息
        for (int i = 0; i < fragments.size(); i++) {
            tabLayout.getTabAt(i).setText("新闻"+i);
        }
    }
    //初始化ActionBar,设置左上角按钮,当点击是弹出左边的抽屉Fragment
    private void initActionBar() {
        //获取ActionBar对象
        ActionBar actionBar=getSupportActionBar();
        //给左上角添加一个返回的图标,参数true为加上这个图标(在android4.0及以上默认false)
      actionBar.setDisplayHomeAsUpEnabled(true);
        //这个类提供了一种方便的方式来绑定功能 DrawerLayout和ActionBar来实现推荐的导航抽屉设计
        //第一个参数上下文,第二个DrawerLayout控件第三个资源文件(只是为了人性化,照顾盲人,点击时会发出声音)
        toggle = new ActionBarDrawerToggle(MainActivity.this, drawerLayout, R.string.open, R.string.close);
        //将抽屉指示器的状态与链接的DrawerLayout同步其状态
        toggle.syncState();
       // ActionBar关联DrawerLayout
        drawerLayout.addDrawerListener(toggle);
    }
       //设置左上角图标具有的点击事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (toggle.onOptionsItemSelected(item)){
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    //初始化控件
    private void initView() {
        drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
        tabLayout = (TabLayout) findViewById(R.id.tabLayout);
        viewPager = (ViewPager) findViewById(R.id.viewPager);
    }
}
//代码里面需要注意的是导包,尤其实·fragment的包都导入一样的;

还有一点:TabLayout需要关联依赖包



BlankFragment

public class BlankFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_blank, container, false);
    }

}

适配器FragmentPagerAdapter

public class MyAdapter extends FragmentPagerAdapter{
    public MyAdapter(FragmentManager fm) {
        super(fm);
    }
     private List mfragments;
   //接收传过来的值
    public void setMfragments(List fragments ){
        mfragments=fragments;
    }
//返回对应位置的Fragment
    @Override
    public Fragment getItem(int position) {
        return mfragments.get(position);
    }

    @Override
    public int getCount() {
        return mfragments.size();
    }
}

在MainActivity中还创建了两个Fragment,我直接创建了两个空的,有什么需求可以自己添加;




你可能感兴趣的:(移动互联)