Android侧滑菜单的简单实现(一)之NagivationView+DrawerLayot


  前言      

  Google带来了Android M,同时还有Android支持库的新一轮更新,其中更是增加一个全新的支持库Android Design Support Library,包含了数个重要的Material Design组件,用于将Material Design适配到Android 2.1(API 7)。Design Support Library现在包含:

NavigationView:侧滑菜单

TextInputLayout:动态监听EditText的控件

FloatingActionButton:浮动按钮

Snackbar:类似Toast,是也是弹出一个提示框

TabLayout:导航标签,与ViewPager配合使用最佳,效果要比PagetabStrip

CoordinatorLayout:没用过。。。请参考这个

  NagivationView实现侧滑菜单

       其实NavigationView自已单个控件是不能实现侧滑菜单的,顶多是个特别点的布局,为了实现侧滑菜单的效果,在这里我将NavigationView与DrawerLayout一起使用。如果要是用Android Studio开发的朋友,也可以在创建Activity的时候直接创建带有抽屉布局的Activity,但是里面代码较多,建议初学者还是自己写,理清下思路。好了下面就来和大家分享下NavigationView的使用步骤:

1.导包(在gradle里面导入当前编译版本下的design包)

compile 'com.android.support:design:25.0.0'

2.写布局

<?xml version="1.0" encoding="utf-8"?><!--根节点 DrawerLayout抽屉布局-->
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawaerLayout_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- 抽屉隐藏时候的界面布局,可以放碎片,一般也都配合碎片使用-->
    <RelativeLayout
        android:id="@+id/rl_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></RelativeLayout>
    <!--NavigationView   侧滑菜单的页面
     app:itemTextColor="#fff" 侧滑菜单里面的menu的文字颜色
    app:headerLayout=""   侧滑菜单的头布局
     app:menu="@menu/menu_main"   侧滑菜单里面的menu布局
     -->
    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:background="#4876FF"
        app:itemTextColor="#fff"
        app:menu="@menu/menu_main" />
</android.support.v4.widget.DrawerLayout>

3.Activity页面Java代码


public class MainActivity extends AppCompatActivity {
    /**
     * ActionBarDrawerToggle  DrawerLayout.DrawerListener实现。
     * NavigationView 搭配使用,推荐用这个方法,符合Android design规范。
     * 作用:
     * 1.改变android.R.id.home返回图标。
     * 2.Drawer拉出、隐藏,带有android.R.id.home动画效果。
     * 3.监听Drawer拉出、隐藏;
     */
    private ActionBarDrawerToggle toggle;
    private Context mContext = this;
    //抽屉布局
    private DrawerLayout mDrawerLayout;
    //侧滑菜单
    private NavigationView mNavigationView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化视图
        initView();
    }

    private void initView() {
        //初始化控件
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawaerLayout_main);
        mNavigationView = (NavigationView) findViewById(R.id.navigation_view);
        //为侧滑菜单里面的menu设置监听
        mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                switch (item.getItemId()) {
                    case R.id.action_base64:
                        transaction.replace(R.id.rl_layout, new Base64Fragment());
                        break;
                    case R.id.action_URLDecode:
                        transaction.replace(R.id.rl_layout, new UrlCodeFragment());
                        break;
                    case R.id.action_MD5:
                        transaction.replace(R.id.rl_layout, new MD5fragment());
                        break;
                    case R.id.action_aes:
                        transaction.replace(R.id.rl_layout, new AesFragment());

                        break;
                }
                transaction.commit();
                if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
                    mDrawerLayout.closeDrawer(Gravity.LEFT);

                }
                return true;
            }
        });
        //设置ActionBar可用
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        //初始化ActionBarDrawerToggle
        toggle = new ActionBarDrawerToggle((Activity) mContext, mDrawerLayout, R.string.open_draw, R.string.close_draw);
        toggle.syncState();
        //DrawerLayout添加监听
        mDrawerLayout.addDrawerListener(toggle);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
// toggle.onOptionsItemSelected(item)  设置带有动画菜单的按钮可用
        return toggle.onOptionsItemSelected(item) ||
                super.onOptionsItemSelected(item);
    }
}

实现效果

这是主页面,也就是抽屉隐藏的时候,这时,点击左上方系统自动生成的菜单按钮或者从左向右滑动页面



可以看到菜单按钮的图案已经变了,其实中间还有动画效果,截图就没法展示了,

总结

          其实NavigationView使用起来也是挺方便的,代码不算复杂,与DrawerLayout代培使用效果还很炫,这里还没运用ToolBar,所以后面我还会在写一个Demo配合Toolbar使用,也会再写用SlidingMenu实现侧滑菜单的Demo,谢谢浏览博文。如果代码部分有不理解的请留言,希望对刚接触NavigationView的你有所帮助。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值