此Demo主要使用了以下控件:

DrawerLayout+CoordinatorLayout+AppBarLayout+Toolbar+TabLayout+ViewPager+NavigationView+Snackbar  实现了抽屉效果 和滑动时Toolbar自动消失等效果

线上效果图:

 

在项目的gradle中添加 :compile 'com.android.support:design:24.2.0'

 

首先看下布局文件:

 

<?xml version="1.0" encoding="utf-8"?>                                                                    


其中ViewPager的 app:layout_behavior="@string/appbar_scrolling_view_behavior" 必须设置  否则滑动的时候Toolbar不会有消失的效果

 

AppbarLayout中设置的属性  app:elevation="0dp" 是为了防止Toolbar和Tablayout中间出现阴影效果

NavigationView控件中有两个属性 app:headerLayout和app:menu 从名字上可以看出 是头布局和菜单 是的 NavigationView 已经将抽屉的样式定义好了 就是头样式 + menu菜单 但是这些属性并不是必须两个都要声明。android:layout_gravity="start"  是定义NavigationView 的滑出效果  start|left 表示从左侧滑出  end|right 表示从右侧滑出。

 

头布局:

 

<?xml version="1.0" encoding="utf-8"?>    

 

 

 

 

 

 

菜单布局:

 

<?xml version="1.0" encoding="utf-8"?>                

 

 

 

在Activity中对这些空间进行处理:

处理Toolbar

 

        mToolBar.setTitle("设计");        setSupportActionBar(mToolBar);

设置Toolbar的标题 并将其设置给Activity。

 

 

处理TabLayout+ViewPager

 

        ViewpageAdapter adapter = new ViewpageAdapter(getSupportFragmentManager(), titles);        mViewPager.setAdapter(adapter);        mTablayout.setTabMode(TabLayout.MODE_FIXED);         mTablayout.setTabGravity(TabLayout.GRAVITY_FILL);        mTablayout.setupWithViewPager(mViewPager);        mTablayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {            @Override            public void onTabSelected(TabLayout.Tab tab) {                mViewPager.setCurrentItem(tab.getPosition(), false);            }            @Override            public void onTabUnselected(TabLayout.Tab tab) {            }            @Override            public void onTabReselected(TabLayout.Tab tab) {            }        });

 

 

mTablayout.setupWithViewPager(mViewPager);是将TabLayout和ViewPager进行关联。setTabMode  设置TabLayout的样式  默认是TabLayout.MODE_FIXED表示不可滑动 另外还有一个TabLayout.MODE_SCROLLABLE 表示可以滑动,就是当TabLayout的条目很多的时候 是可以左右滑动切换Tab。setTabGravity 表示TabLayout的对齐方式,默认是TabLayout.GRAVITY_FILL 表示填充屏幕宽度  另外一个TabLayout.GRAVITY_CENTER 表示Tab居中紧凑显示 


处理DrawLayout + NavigationView

 

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, mDrawLayout, mToolBar, R.string.toggle_start, R.string.toggle_end);        mDrawLayout.addDrawerListener(toggle);        toggle.syncState();


toggle.syncState(); 是在Toolbar上面添加图标 (三条杠)

 

 

 

 

        TextView mHeaderTitle = (TextView) mNavigView.getHeaderView(0).findViewById(R.id.header_title);        mHeaderTitle.setText("我是头文件");        mNavigView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {            @Override            public boolean onNavigationItemSelected(@NonNull MenuItem item) {                int itemId = item.getItemId();                switch (itemId) {                    case R.id.menu_share:                        Snackbar.make(mDrawLayout, "分享", Snackbar.LENGTH_SHORT).setAction("知道了", new View.OnClickListener() {                            @Override                            public void onClick(View view) {                            }                        }).show();                        break;                    case R.id.menu_search:                        Snackbar.make(mDrawLayout, "搜索", Snackbar.LENGTH_SHORT).show();                        break;                    case R.id.menu_setting:                        Snackbar.make(mDrawLayout, "设置", Snackbar.LENGTH_SHORT).show();                        break;                    case R.id.menu_about:                        Snackbar.make(mDrawLayout, "关于", Snackbar.LENGTH_SHORT).show();                        break;                }                mDrawLayout.closeDrawer(GravityCompat.START);                return true;            }        });


这个是处理抽屉控件 找到相关的控件并进行处理 

 

 

最后贴上Activity全部代码:

 

public class MdActivity extends AppCompatActivity {    private TabLayout mTablayout;    private Toolbar mToolBar;    private ViewPager mViewPager;    public static final String[] titles = {"tab1", "tab2", "tab3", "tab4"};    private DrawerLayout mDrawLayout;    private NavigationView mNavigView;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.md_activity);        initViews();        initNavigationView();    }    private void initViews() {        mTablayout = (TabLayout) findViewById(R.id.tablayout);        mToolBar = (Toolbar) findViewById(R.id.toolbar);        mViewPager = (ViewPager) findViewById(R.id.viewpager);        mDrawLayout = (DrawerLayout) findViewById(R.id.drawer_layout);        mNavigView = (NavigationView) findViewById(R.id.navigation_view);        mToolBar.setTitle("设计");        setSupportActionBar(mToolBar);        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, mDrawLayout, mToolBar, R.string.toggle_start, R.string.toggle_end);        mDrawLayout.addDrawerListener(toggle);        toggle.syncState();        ViewpageAdapter adapter = new ViewpageAdapter(getSupportFragmentManager(), titles);        mViewPager.setAdapter(adapter);        mTablayout.setTabMode(TabLayout.MODE_FIXED); //默认样式 其他:MODE_SCROLLABLE        mTablayout.setTabGravity(TabLayout.GRAVITY_FILL);//默认样式  其他 :GRAVITY_CENTER        mTablayout.setupWithViewPager(mViewPager);        mTablayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {            @Override            public void onTabSelected(TabLayout.Tab tab) {                mViewPager.setCurrentItem(tab.getPosition(), false);            }            @Override            public void onTabUnselected(TabLayout.Tab tab) {            }            @Override            public void onTabReselected(TabLayout.Tab tab) {            }        });    }    private void initNavigationView() {        TextView mHeaderTitle = (TextView) mNavigView.getHeaderView(0).findViewById(R.id.header_title);        mHeaderTitle.setText("我是头文件");        mNavigView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {            @Override            public boolean onNavigationItemSelected(@NonNull MenuItem item) {                int itemId = item.getItemId();                switch (itemId) {                    case R.id.menu_share:                        Snackbar.make(mDrawLayout, "分享", Snackbar.LENGTH_SHORT).setAction("知道了", new View.OnClickListener() {                            @Override                            public void onClick(View view) {                            }                        }).show();                        break;                    case R.id.menu_search:                        Snackbar.make(mDrawLayout, "搜索", Snackbar.LENGTH_SHORT).show();                        break;                    case R.id.menu_setting:                        Snackbar.make(mDrawLayout, "设置", Snackbar.LENGTH_SHORT).show();                        break;                    case R.id.menu_about:                        Snackbar.make(mDrawLayout, "关于", Snackbar.LENGTH_SHORT).show();                        break;                }                mDrawLayout.closeDrawer(GravityCompat.START);                return true;            }        });    }}

 

 

 

我是源码

 

 

 

更多相关文章

  1. 使用U3D 实现 Android(安卓)Launcher(提供源码)
  2. Android(安卓)一个简单的自定义WheelView实现
  3. Android(安卓)自定义控件在Android(安卓)Studio中xmlns不识别
  4. Android实现ViewPager无限循环效果(二)
  5. Android(安卓)CheckBox设置背景selector和文本text 设置selectCo
  6. android源码链接
  7. Android(安卓)自定义控件属性
  8. Android中使用TagFlowLayout制作动态添加删除标签
  9. Android(安卓)常用布局及基本UI控件

随机推荐

  1. android 9.0 设置 应用应用信息 隐藏 app
  2. Android隐式启动Activity可能存在的坑
  3. 设置ListView分割线
  4. Android 7.1 触摸事件代码跟踪
  5. android各版本对应的SDK level(包括androi
  6. [Android 特效] Android 通过流播放声音(
  7. Android写Logcat文件保存到SD卡
  8. android用Popup弹出窗(PopupWindow的使用
  9. 教你怎么配置Android的AndroidManifest.x
  10. android4.2上获取应用程序大小的变更点