安卓之NavigationView使用

安卓之NavigationView使用
在android5.0后,google提出了meteral design这样的一个设计理念之后,提供给用户官方的侧边栏的控件,这就是NavigationView。它不仅严格按照Material Design的要求来进行设计,而且还可以将滑动菜单页面的实现变得非常简单。
因为这个控件是在Design Support库中提供的,首先我们就需要将这个库引入到项目中才行。我在上一篇《安卓之CircleImageView解析》中有介绍在这里我就不在介绍了。
首先创建一个安卓项目。
在编写之前我们要准备两个东西,一个menu和一个layout。menu是用来在NavigationView中显示具体的菜单项的,Layout则是用来在NavigationView中显示头部布局的。
首先我们准备menu(menu的名字为navigation_menu),创建一个menu文件,编写如下代码:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
<group>
    <item
        android:id="@+id/item1"
        android:title="开通会员"
        />
    <item
        android:id="@+id/item2"
        android:title="我的钱包"
        android:icon="@drawable/qianbao"
        />
    <item
        android:id="@+id/item3"
        android:title="我的收藏"
        />
    <item
        android:id="@+id/item4"
        android:title="我的电话"
        android:icon="@drawable/dianhau"
        />

</group>
</menu>

grop表示一个组。
接下来准备一个Layout(Layout的名字为navigation_head),在这个Layout中主要放置一张图片和一个用户名,我们使用的图片是正方形的,我们使用CircleImageView把它圆形化,
在这里插入图片描述

具体的代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="150dp">
  <de.hdodenhof.circleimageview.CircleImageView
      android:layout_width="100dp"
      android:layout_height="100sp"
      android:src="@drawable/touxiang"
      android:layout_gravity="center"
      android:layout_marginTop="10dp"
      />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你好吗"
        android:layout_gravity="center"
        />
</LinearLayout>

在activity_main.xml中编写如下代码:

<LinearLayout 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:orientation="vertical"
    tools:context=".MainActivity">
<androidx.drawerlayout.widget.DrawerLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/drawerlayout"
    >
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            />
    </FrameLayout>
    <com.google.android.material.navigation.NavigationView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/navigationview"
        android:layout_gravity="left"
        app:headerLayout="@layout/navigation_head"
        app:menu="@menu/navigation_menu"
        />

</androidx.drawerlayout.widget.DrawerLayout>

</LinearLayout>

这样滑动菜单中显示的内容也就变成NavigationView,这里我们通过app:menu和app:headerLayout属性将我们之前准备好的menu和headerlayout设置了进去,这样NavigationView就定义好了。
在MainActivity中编写如下代码:


public class MainActivity extends AppCompatActivity {
   DrawerLayout drawerLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //隐藏掉系统原先的导航栏
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        drawerLayout=(DrawerLayout)findViewById(R.id.drawerlayout);
        NavigationView navigationView=(NavigationView)findViewById(R.id.navigationview);
        Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        ActionBar actionBar=getSupportActionBar();
        if (actionBar!=null){
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setHomeAsUpIndicator(R.drawable.daohang);
        }
        navigationView.setCheckedItem(R.id.item1);
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                drawerLayout.closeDrawers();;
                return true;
            }
        });


    }
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case  android.R.id.home:
                drawerLayout.openDrawer(GravityCompat.START);

                break;
            default:
        }
        return true;
    }
}

这样一个精美的滑动菜单页面就做好了。
效果图如下:
在这里插入图片描述
历经千万苦,方能功名就,愿历尽千帆,归来任少年!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值