美文网首页高级UI
DrawerLayout+NavigationView

DrawerLayout+NavigationView

作者: 爺珍爱那颗心 | 来源:发表于2019-12-16 15:58 被阅读0次

    侧滑菜单的实现方式有许多种,之前有写过一篇SlidingMenu的使用,这次决定记录下DrawerLayout+NavigationView来实现的过程

    • 这里说一下DrawerLayout之前是放在android.support.v4.widget包下的,不过AS3.5以后google整合了这些包到androidx中,于是这次我用的包为androidx.drawerlayout.widget.DrawerLayout。
      • DrawerLayout下包裹两个控件
        • 第一个是内容控件
        • 第二个是侧滑控件
        • addDrawerListener用来设置侧滑事件
      • NavigationView随着版本更新这里也变成了com.google.android.material.navigation.NavigationView
        • headerLayout设置侧滑布局的头部
        • menu设置侧滑布局头部下的条目
        • layout_gravity设置滑出方向,start为从左侧划出,end为右侧
        • 头部监听使用designNavigationView.getHeaderView(0).setOnClickListener即可
        • 条目监听使用designNavigationView.setNavigationItemSelectedListener即可。

    代码其实很简单,不过还是放一下吧,第一次用的话,可以做参考。

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.drawerlayout.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:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/drawer_layout"
        tools:context=".MainActivity">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="320dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:background="@color/colorAccent">
         <com.google.android.material.navigation.NavigationView
             android:id="@+id/design_navigation_view"
             android:layout_width="320dp"
             android:layout_height="match_parent"
             app:headerLayout="@layout/layout_header"
             app:menu="@menu/menu_left"
             android:layout_gravity="start"/>
        </LinearLayout>
    
    </androidx.drawerlayout.widget.DrawerLayout>
    

    headerLayout布局

    <?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"
        android:orientation="vertical">
    
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@mipmap/bg_header" />
    
    </LinearLayout>
    

    menu布局

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item
            android:id="@+id/menu_app_update"
            android:title="应用管理"
            android:icon="@mipmap/ic_launcher"/>
        <item
            android:id="@+id/menu_message"
            android:title="消息中心"
            android:icon="@mipmap/ic_launcher"/>
        <item
            android:id="@+id/menu_setting"
            android:title="设置"
            android:icon="@mipmap/ic_launcher"/>
    
    </menu>
    

    代码

    public class MainActivity extends AppCompatActivity {
    
        @BindView(R.id.drawer_layout)
        DrawerLayout mDrawerLayout;
        @BindView(R.id.design_navigation_view)
        NavigationView designNavigationView;
        private View headView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ButterKnife.bind(this);
    //        mDrawerLayout.addDrawerListener();
            headView = designNavigationView.getHeaderView(0);
            headView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                }
            });
            designNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                    switch (menuItem.getItemId()){
                        case R.id.menu_app_update:
    
                            break;
                    }
                    return false;
                }
            });
        }
    }
    

    打完收工。

    相关文章

      网友评论

        本文标题:DrawerLayout+NavigationView

        本文链接:https://www.haomeiwen.com/subject/ealdnctx.html