侧滑菜单布局DrawLayout与圆形头像

常见错误

NavigationView占了主界面;这是因为没有设置layout_gravity = “start”

使用

1、依赖包

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

compile 'de.hdodenhof:circleimageview:2.1.0' //圆形头像

2、布局文件
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"
    android:id="@+id/drawerlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        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="wrap_content"
                />

            <android.support.v7.widget.RecyclerView
                android:id="@+id/recyclerview"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"/>
        </LinearLayout>
    </FrameLayout>

    <android.support.design.widget.NavigationView
        app:headerLayout="@layout/nav_header"
        app:menu="@menu/menu_main"
        android:layout_gravity="start"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>


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

注:第一个子控件是主界面显示的内容,第二个是侧滑菜单显示的内容

nav_header.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="180dp">
    <de.hdodenhof.circleimageview.CircleImageView
        android:layout_centerInParent="true"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:src="@drawable/me"/>

    <TextView
        android:id="@+id/email"
        android:text="[email protected]"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"/>
    <TextView
        android:text="莫铭棋"
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/email"/>

</RelativeLayout>

menu_nav.xml 侧滑菜单的菜单项

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/menu_main_search"
        android:icon="@drawable/ic_search_white_24dp"
        android:title="搜索"
        app:showAsAction="ifRoom"/>

    <item
        android:id="@+id/menu_main_add"
        android:icon="@drawable/ic_add_white_24dp"
        android:title="添加"
        app:showAsAction="ifRoom"
        />
    <item android:title="分享">
        <menu>
        <item
            android:title="QQ"
            android:icon="@drawable/ic_share_white_24dp" />
        </menu>
    </item>
</menu>

3、代码:设置HomeAsUp按钮,设置点击事件

注意:主界面的点击事件在OnOptionItemSelected()方法中处理,而侧滑栏中的点击时间需要setNavigationItemSelected

ActionBar actionBar = getSupportActionBar();
        if(null != actionBar) {
            actionBar.setDisplayHomeAsUpEnabled(true); //设置导航按钮的显示
            actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);//设置图标
        }
        //侧滑导航栏
        mDrawerLayout = (DrawerLayout)findViewById(R.id.drawerlayout);
        NavigationView navigationView = (NavigationView) findViewById(R.id.design_navigation_view);
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                mDrawerLayout.closeDrawer(GravityCompat.START,true); //点击任一菜单都关闭侧滑栏
                return true;
            }
        });
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            //android.R.id.home是那个HomeAsUp导航按钮
            case android.R.id.home:
                Toast.makeText(this, "点击了home", Toast.LENGTH_SHORT).show();
                mDrawerLayout.openDrawer(GravityCompat.START);
                break;
            default:
                Toast.makeText(this, "点击了菜单", Toast.LENGTH_SHORT).show();
        }
        return true;
    }

猜你喜欢

转载自blog.csdn.net/mingC0758/article/details/81713629