Google官方navigation drawer详细讲解

稍微研究了下谷歌侧滑栏官方的侧滑栏这边给大家讲解它的具体结构

显示Activity_main的xml代码

<?xml version="1.0" encoding="utf-8"?>
<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/activity_main"
    android:layout_width="match_parent"

    android:fitsSystemWindows="true"
    tools:openDrawer="start"

    android:layout_height="match_parent">

    <include layout="@layout/toolbar"/>

    <android.support.design.widget.NavigationView
        android:id="@+id/item_NavigationView"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        app:menu="@menu/activity_main2_drawer">
    </android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>

android:fitsSystemWindows="true"
    tools:openDrawer="start"
这两行要加可以在预览的时候看出来注意布局要用DrawerLayout,里面包含工具栏(内容栏包含在toolbar的布局里稍后有代码)和侧滑栏,内容视图include包含一个layout,要写在侧滑栏之前,侧滑栏的layout_gravity设置它是在左还是在右,在左是start右是end,app:menu这行是设置的它的列表按钮代码如下就是包含它的一些列表按钮

<?xml version="1.0" encoding="utf-8"?>
<menu
    xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/item_01"
            android:icon="@drawable/ic_menu_camera"
            android:title="Item_01" />
        <item
            android:id="@+id/Item_02"
            android:icon="@drawable/ic_menu_gallery"
            android:title="Item_02" />
        <item
            android:id="@+id/Item_03"
            android:icon="@drawable/ic_menu_slideshow"
            android:title="Item_03" />
        <item
            android:id="@+id/Item_04"
            android:icon="@drawable/ic_menu_manage"
            android:title="Item_04" />
    </group>

    <item android:title="666">
        <menu>
            <item
                android:id="@+id/Item_05"
                android:icon="@drawable/ic_menu_share"
                android:title="Item_05" />
            <item
                android:id="@+id/Item_06"
                android:icon="@drawable/ic_menu_send"
                android:title="Item_06" />
        </menu>
    </item>

</menu>

然后是toolbar的代码

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

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:popupTheme="@style/AppTheme.PopupOverlay"/>

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_layout"/>

</LinearLayout>
AppBarLayout里面包含一个Toolbar就是标题栏,下面包含一个内容布局,内容布局代码不贴了空的,还有就是要把原来的标题栏干掉否则会出问题

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
打开styles.xml在它的AppTheme加入这两行即可,上面就是布局的一些基本概念,这样做完你就可以在屏幕左侧侧滑出一个菜单栏和显示一些按钮,不过什么功能都没有,然后就是关键的时候了贴代码

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //显示toolbar        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.activity_main);

        //toolbardrawer这个绑定到一起,使其可以显示侧滑按钮并操作,并监听手势以改变按钮样式
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this,
                drawer,
                toolbar,
                R.string.navigation_drawer_open,
                R.string.navigation_drawer_close);

        //设置监听滑动,只要滑动了那个按钮就会相应发生改变
        drawer.setDrawerListener(toggle);

        //设置执行显示到toolbar上面
        toggle.syncState();

        //获取到侧滑栏,并设置它的监听事件
        NavigationView navigationView = (NavigationView) findViewById(R.id.item_NavigationView);
        navigationView.setNavigationItemSelectedListener(this);

    }

    //恩设置侧滑栏在出现的时候按下back(返回按钮)不是直接退到桌面而是返回到内容界面
    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.activity_main);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    //设置策划栏的监听事件
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

        switch (item.getItemId()) {
            case R.id.item_01 :
                Toast.makeText(this, "Item_01", Toast.LENGTH_SHORT).show();
                break;
            case R.id.Item_02 :
                Toast.makeText(this, "Item_02", Toast.LENGTH_SHORT).show();
                break;
            case R.id.Item_03 :
                Toast.makeText(this, "Item_03", Toast.LENGTH_SHORT).show();
                break;
            case R.id.Item_04 :
                Toast.makeText(this, "Item_04", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }

        //按下按钮后关闭侧滑栏关闭侧滑
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.activity_main);
        drawer.closeDrawer(GravityCompat.START);

        return true;
    }
}

一行一行解释下面这个就是把写好的toolbar显示出来,因为你看看Activity_main.xml里面,我们的标题栏是不是包含着内容布局后面跟着一个侧滑栏你不把他显示什么都没有

        //显示toolbar        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

然后是这个我把注释都写好了,这段的作用就是把标题栏左上角那个按钮弄出来,并且按下去可以跳出侧滑栏,在滑动的时候按钮动画会改变

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.activity_main);

//toolbardrawer这个绑定到一起,使其可以显示侧滑按钮并操作,并监听手势以改变按钮样式
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
        this,
        drawer,
        toolbar,
        R.string.navigation_drawer_open,
        R.string.navigation_drawer_close);

//设置监听滑动,只要滑动了那个按钮就会相应发生改变
drawer.setDrawerListener(toggle);

//设置执行显示到toolbar上面
toggle.syncState();

再下去,这个就是监听点击事件

//获取到侧滑栏,并设置它的监听事件
NavigationView navigationView = (NavigationView) findViewById(R.id.item_NavigationView);
navigationView.setNavigationItemSelectedListener(this);
监听代码在这,最后两行不加的话你按下了按钮它还是在侧滑栏里,作用就是关闭侧滑栏回到内容区

//设置策划栏的监听事件
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {

    switch (item.getItemId()) {
        case R.id.item_01 :
            Toast.makeText(this, "Item_01", Toast.LENGTH_SHORT).show();
            break;
        case R.id.Item_02 :
            Toast.makeText(this, "Item_02", Toast.LENGTH_SHORT).show();
            break;
        case R.id.Item_03 :
            Toast.makeText(this, "Item_03", Toast.LENGTH_SHORT).show();
            break;
        case R.id.Item_04 :
            Toast.makeText(this, "Item_04", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
    }

    //按下按钮后关闭侧滑栏关闭侧滑
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.activity_main);
    drawer.closeDrawer(GravityCompat.START);

    return true;
}

还有一个类,你可以试试网易云音乐的app是不是把侧滑栏弄出来的时候按下back会回到内容区,下面就是这个功能,你不加这个功能按下back他会回来界面的

//恩设置侧滑栏在出现的时候按下back(返回按钮)不是直接退到桌面而是返回到内容界面
@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.activity_main);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}
暂时讲到这,bye

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虎纠板栗咖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值