Android DrawerLayout和NavigationView实现左右侧滑和自定义toolbar。

首先看效果,如图所示。

由于项目已经完成一部分了,各种效果已经夹杂在一起了,代码就不单独提取出来了,大致代码如下。

布局文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="55dp"
                android:background="@color/white" />

            <android.support.design.widget.TabLayout
                android:id="@+id/id_tabLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabGravity="center"
                app:tabIndicatorColor="@color/black"
                app:tabMode="scrollable"
                app:tabSelectedTextColor="@color/black"
                app:tabTextAppearance="@style/TabLayout"
                app:tabTextColor="@color/gray" />

            <android.support.v4.view.ViewPager
                android:id="@+id/viewpager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@+id/id_tabLayout"></android.support.v4.view.ViewPager>
        </LinearLayout>

        <android.support.design.widget.NavigationView
            android:id="@+id/navigation_start"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start" />

        <android.support.design.widget.NavigationView
            android:id="@+id/navigation_end"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="end"
            android:layout_marginTop="55dp" />
    </android.support.v4.widget.DrawerLayout>
</RelativeLayout>
android:layout_gravity="start"就是左边的,end就是右边的。

然后在activity里面绑定各个控件。

@Bind(R.id.navigation_start)
    NavigationView navigationStart;
    @Bind(R.id.navigation_end)
    NavigationView navigationEnd;
	@Bind(R.id.toolbar)
    Toolbar bar;
    @Bind(R.id.drawer_layout)
    DrawerLayout drawerLayout
	NavigationStartFragment startFragment;
    NavigationEndFragment endFragment;
然后用自定义的fragment替换掉NavigationView,用自定义的布局文件替换掉toolbar的默认布局

getLayoutInflater().inflate(R.layout.toolbar,bar);
        start = (ImageView) findViewById(R.id.iv_start);
        end = (ImageView) findViewById(R.id.iv_end);
		setSupportActionBar(bar);
		start.setOnClickListener(onClickListener);
        end.setOnClickListener(onClickListener);
R.layout.toolbar就是自定义的布局文件,左右两个image,中间一个标题image。设置点击打开关闭侧滑事件。
startFragment = new NavigationStartFragment();
        endFragment = new NavigationEndFragment();
        getSupportFragmentManager().beginTransaction().replace(R.id.navigation_start, startFragment).commit();
        getSupportFragmentManager().beginTransaction().replace(R.id.navigation_end, endFragment).commit();
        //addDrawerListener可以监听侧滑打开关闭事件
        drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {


            }


            @Override
            public void onDrawerOpened(View drawerView) {


            }


            @Override
            public void onDrawerClosed(View drawerView) {
                
            }


            @Override
            public void onDrawerStateChanged(int newState) {


            }
        });

监听到之后里面的具体实现根据项目需求自己发挥。

//drawerLayout.isDrawerOpen可以判断布局菜单是否打开和关闭
	private View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.iv_start:
                    if(drawerLayout.isDrawerOpen(navigationStart)){
                        drawerLayout.closeDrawer(navigationStart);
                    }else{
                        drawerLayout.openDrawer(navigationStart);
                    }
                    break;
                case R.id.iv_end:
                    if(drawerLayout.isDrawerOpen(navigationEnd)){
                        drawerLayout.closeDrawer(navigationEnd);
                    }else{
                        drawerLayout.openDrawer(navigationEnd);
                    }
                    break;
            }
        }
    };
到此结束。老板把双休改成单休了,真是太累了,受不了。最近都懒得写博客。加油,坚持吧。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值