其他分享
首页 > 其他分享> > Android抽屉菜单的简单实现(DrawerLayout+NavigationView)

Android抽屉菜单的简单实现(DrawerLayout+NavigationView)

作者:互联网

最近的学习中遇到了抽屉菜单的使用,写个笔记记录一下。

首先创建布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dl"
    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"
    tools:context=".MainActivity">
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <androidx.appcompat.widget.Toolbar
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        android:id="@+id/tbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:background="?attr/colorPrimary"
        />
</FrameLayout>

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav"
        android:layout_width="200dp"
        android:layout_height="match_parent"
       android:layout_gravity="start"
        app:menu="@menu/nav_menu"
        app:headerLayout="@layout/herader"
        />

</androidx.drawerlayout.widget.DrawerLayout>

最外面要使用DrawerLayout,然后往下面第一个子标签就是主界面要现实的内容,这里我添加了一个Toolbar,也可以用其他的控件,布局方式也可以换,看具体需求;

接下来的第二个NavigationView就是重重之重了,需要设置的属性有:ID:这个不用说,地球人都知道

android:layout_width:设置宽度,也可以用匹配内容,也可以自己设置值

android:layout_height:一般都是填充父窗体。

android:layout_gravity:这个属性很重要,start表示从左边拉出来,end表示右边;

app:menu="@menu/nav_menu" //这里看到引用就知道我们需要自己去创建menu的资源文件夹内容如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group>
    <item
        android:id="@+id/one"
        android:title="one"
        android:icon="@drawable/abc_vector_test" />
    <item
        android:id="@+id/two"
        android:title="two"
        android:icon="@drawable/abc_vector_test" />
    <item
        android:id="@+id/four"
        android:title="four"
        android:icon="@drawable/abc_vector_test" />
</group>
    <item
        android:id="@+id/five"
        android:title="five"
        android:icon="@drawable/abc_vector_test" />
    <item
        android:id="@+id/six"
        android:title="six"
        android:icon="@drawable/abc_vector_test" />
</menu>

这个文件相当于你划出抽屉后下面的每个单独的选项有机会我贴图上来;

按照<group>标签分组,title标题属性设置按钮的名字,icon设置选项的图标可以自己定义 id:这个就不说了哈

 

 

 

app:headerLayout="@layout/herader"

这又是一个引用,看到是layout文件夹里面的,意味着我们需要去创建一个layout;这个布局用来当作头题菜单上面显示的内容,一般都是头像什么的;布局文件很简单,根据自己需求来,写好后引用即可;

===========================================以上是布局部分======================================

接下来就要去更改代码文件了,找到DrawerLayout对应的活动文件

public class MainActivity extends AppCompatActivity {

    DrawerLayout dl;
    NavigationView nv;
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar=findViewById(R.id.tbar);
        setSupportActionBar(toolbar);
        nv=findViewById(R.id.nav);
        dl=findViewById(R.id.dl);
        nv.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                dl.closeDrawers();
                return false;
            }
        });

    }

这里是设置抽屉菜单项的点击事件,我在该事件中没有区分每个菜单项,一般都是用Switch来判断点击了什么按钮设置事件,因为是简单事件我就不写复杂了,只要知道怎么用就可以,我在点击事件里面调用了关闭抽屉窗口的方法。

 

 

至此简单调用已经实现,在抽屉菜单划出和关闭的过程中还会触发很多其他事件,我们有需要可以自己去重写,这里就不展开了,可以查看API;

标签:dl,layout,menu,NavigationView,DrawerLayout,Android,抽屉,id
来源: https://blog.csdn.net/Nokia_lumia_830/article/details/104795072