java中nav元素_NavigationView 的使用

对于抽屉式菜单界面很多APP都有应用,此前写抽屉式界面都需要自定义。现在谷歌提供的 导航视图(NavigationView与抽屉布局(DrawerLayout) 结合使用,能提供很好的侧滑交互体验。要使用NavigationView 首先还是要添加依赖:implementation 'com.android.support:design:26.1.0'     先实现布局文件:

xmlns:app="http://schemas.android.com/apk/res-auto"

android:id="@+id/drawerlayout"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/toolbar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize"

android:background="?attr/colorPrimary">

android:id="@+id/tv_navigation"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center"

android:text="这是点击了那个导航菜单?"

android:textSize="20sp" />

android:id="@+id/navigation"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_gravity="start"

app:headerLayout="@layout/navigation_header"

app:menu="@menu/drawer_view">

首先说一下NavigationView的属性:

1、android:layout_gravity : 表示布局自身在父布局的那个位置。对于Drawerlayout 来说,是指其子布局从那边滑出

NavigationView 通常设置 android:layout_gravity="start"

2、app:headerLayout  : 指定一个头布局的资源文件

3、app:menu : 指定一个导航菜单的资源文件

4、app:ItemBackground : 指定菜单项的背景

5、app:ItemTextColor : 指定菜单项的文字颜色

6、app:ItemTextAppearance : 指定菜单项的文字样式

7、app:ItemIconTint : 指定菜单项的图标色彩

其中navigation_header是一个自定义的头布局文件,代码如下:<?xml version="1.0" encoding="utf-8"?>

android:layout_width="match_parent"

android:layout_height="150dp"

android:background="?attr/colorPrimary"

android:orientation="horizontal">

android:layout_width="100dp"

android:layout_height="100dp"

android:layout_gravity="center_vertical"

android:layout_marginLeft="50dp"

android:src="@mipmap/ic_launcher" />

android:id="@+id/tv_navigation_title"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:text="导航视图"

android:textColor="@color/white_FFFFFF"

android:textSize="20sp" />

    还有我自定义的菜单文件 drawer_view.xml, 注意:要实现两个组(group)之间有分割线,group得有 id:<?xml version="1.0" encoding="utf-8"?>

android:id="@+id/group1"

android:checkableBehavior="single">

android:id="@+id/nav_home"

android:icon="@mipmap/home"

android:title="首页" />

android:id="@+id/nav_teleplay"

android:icon="@mipmap/teleplay"

android:title="电视剧" />

android:id="@+id/nav_movie"

android:icon="@mipmap/movie"

android:title="电影" />

android:id="@+id/group2"

android:checkableBehavior="single">

android:id="@+id/nav_shows"

android:icon="@mipmap/shows"

android:title="综艺" />

android:id="@+id/nav_funny"

android:icon="@mipmap/funny"

android:title="搞笑" />

android:id="@+id/nav_setting"

android:icon="@mipmap/setting"

android:title="设置" />

android:id="@+id/nav_onwer"

android:icon="@mipmap/owner"

android:title="关于我们" />

然后这个menu 的图片资源文件为:

f3e68f1f72559a0fed865f1f69e7843e.png  

c395abc371f2ce14f2a74fe867e2a7a6.png  

2079130863b29e3ecf673ecd79e859b8.png  

e86527a46e45606ea86f0ca47fe90adb.png  

772e3755025de064a80c38e7c658818e.png  

da1adfa3af451d3a94f16d5448a45b16.png  

d9bcfa6ae99a30885a95a473d4ea071e.png

最后在代码中进行功能的实现,代码如下:public class NavigationActivity extends AppCompatActivity {

private NavigationView mNavigation;

private TextView tvNavigation;

private Toolbar mToolbar;

private ActionBar mActionBar;

private DrawerLayout mDrawerLayout;

private View mHeaderView;

private TextView mtvNavigationTitle;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_navigation);

initView();

initEvent();

}

private void initView() {

mToolbar = (Toolbar) findViewById(R.id.toolbar);

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);

mNavigation = (NavigationView) findViewById(R.id.navigation);

tvNavigation = (TextView) findViewById(R.id.tv_navigation);

// 获取头布局 然后通过头布局视图获取里面的控件

mHeaderView = mNavigation.getHeaderView(0);

mtvNavigationTitle = (TextView) mHeaderView.findViewById(R.id.tv_navigation_title);

}

private void initEvent() {

setSupportActionBar(mToolbar);

mActionBar = (ActionBar) getSupportActionBar();

mActionBar.setDisplayHomeAsUpEnabled(true);

mNavigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

@Override

public boolean onNavigationItemSelected(MenuItem item) {

String title = item.getTitle().toString();

tvNavigation.setText(title);

mtvNavigationTitle.setText(title);

mDrawerLayout.closeDrawers();

// 是否将项目设为选中项目

return true;

}

});

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case android.R.id.home:

mDrawerLayout.openDrawer(GravityCompat.START);

break;

}

return super.onOptionsItemSelected(item);

}

}        其中需要注意就是setNavigationItemSelectedListener 方法,返回false 是不设置点击的项目为选中状态,true 则设置为选中状态。第二个就是 getHeaderView()  方法,能获取头布局文件的控件,进入执行控制操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值