饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)

  • 1.NavigationView
    • 1.使用方法
      • 1.导包
      • 2.布局
        • 1.头布局
        • 2.Menu
        • 3.NavigationView控件
    • 2.菜单item监听
  • 2.Toolbar
    • 1.使用方法
      • 1.主布局
      • 2.Menu
    • 2.菜单item点击

本讲图标来源: Iconfont-阿里巴巴矢量图标库

1.NavigationView

侧滑栏(NavigationView)通常与抽屉布局(DrawerLayout)结合使用,实现了良好的侧滑交互体验。从常规开发来说,侧滑一般都是左侧实现侧滑,抽屉布局可有三个子布局。(注意:第一个子布局一定要是主界面,其次的两个子布局就是左右两侧的布局,左右两侧只放一个也可)

在本讲里,我将为大家介绍导航视图(NavigationView)结合抽屉布局(DrawerLayout)实现在页面中侧滑的效果,一般都是左侧实现侧滑, 抽屉布局可有三个子布局。(注意:第一个子布局一定要是主界面,其次的两个子布局就是左右两侧的布局,左右两侧只放一个也可),导航视图有一个头部文件和一个菜单menu

1.使用方法

1.导包

第一步,在bulid.gradle下导入依赖包

    implementation 'com.android.support:design:26.1.0'

饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第1张图片
我们会发现依赖包那一行爆红了,原因是可能是库的版本较低,出现了不兼容的现象。
参考博客
解决方法:
Refactor—>Migrate to AndroidX
饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第2张图片
然后点击Migrate(迁移-相当于备份,也可以取消),然后点击左下角 Do Refactor(重构),就可以发现问题解决了

2.布局

1.头布局

第一步,创建一个新布局,作为侧滑栏的头部布局 headlayout
饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第3张图片

添加布局代码

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:layout_width="match_parent"   android:background="#07E1CF"    android:layout_height="200dp">    <ImageView        android:id="@+id/head"        android:layout_width="60dp"        android:layout_height="60dp"        android:background="@drawable/head"        app:layout_constraintBottom_toBottomOf="parent"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent" />    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:text="Rose-J"        android:textSize="21dp"        android:textColor="#000000"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@id/head" /></androidx.constraintlayout.widget.ConstraintLayout>

饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第4张图片

2.Menu

第一步,创建一个 menu 文件

在menu中,如果给group设置id属性就会有分割线,不设置的话不会有


第二步,加入代码

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android">    <group        android:id="@+id/group1"        android:checkableBehavior="single"        >        <item            android:id="@+id/item_1"            android:icon="@drawable/message"            android:checkable="true"            android:title="消息" >        </item>        <item            android:id="@+id/item_2"            android:icon="@drawable/friend"            android:checkable="true"            android:title="好友" >        </item>        <item            android:id="@+id/item_3"            android:icon="@drawable/about"            android:checkable="true"            android:title="关于" >        </item>    </group></menu>

饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第5张图片

3.NavigationView控件

在mainactivity的布局文件中加入NavigationView控件
(注意有许多控件的时候,NavigationView控件要生效,必须要放到最底下)

<?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/drawerLayout"    tools:context=".MainActivity">    <com.google.android.material.navigation.NavigationView        android:id="@+id/navigationView"        android:layout_width="200dp"        android:layout_height="match_parent"        android:layout_gravity="left"        android:fitsSystemWindows="true"        app:headerLayout="@layout/headlayout"        app:menu="@menu/menu"/></androidx.drawerlayout.widget.DrawerLayout>
  • headerLayout 头布局
  • layout_gravity 划出的方向
  • menu 菜单

饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第6张图片
为了美观,再把顶部标题框去掉
饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第7张图片
运行

2.菜单item监听

饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第8张图片

public class MainActivity extends AppCompatActivity {    NavigationView mNavigationView;    DrawerLayout mDrawerLayout;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mNavigationView=findViewById(R.id.navigationView);        mDrawerLayout=findViewById(R.id.drawerLayout);        mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {            @Override            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {//菜单 item 监听                switch (menuItem.getItemId()) {                    case R.id.item_1:                        Log.i("Mainactivity","item_1");                        break;                    case R.id.item_2:                        Log.i("Mainactivity","item_2");                        break;                    case R.id.item_3:                        Log.i("Mainactivity","item_3");                        break;                }                mDrawerLayout.closeDrawer(GravityCompat.START);                return true;            }        });    }}

运行(return flase就不会出现item被选中状态)

2.Toolbar

Android5.0引入了一个新控件Toolbar,代替了ActionBar,由于其高度的灵活性、可定制性,符合Material Design的风格,越来越多的应用用上了Toolbar,我们可以看到知乎、网易云音乐的标题栏用的Toolbar。由于ActionBar是由系统创建并对其进行相关的初始化,并不能很好的控制,所以在很多APP上就出现了跟ActionBar相似的效果,但是又不是ActionBar,模仿ActionBar而已,我们原来的APP就是自己定义的一个简单的title布局,使用的时候加入到相应的页面,所以这个时候Toolbar出现了,ToolBar只是一个普通的控件,继承自ViewGroup,可以直接在布局文件中使用,但是跟ActionBar又没有太大的区别,只不过更自由了。

1.使用方法

1.主布局

方法一:通过布局文件来设置
饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第9张图片

<?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/drawerLayout"    tools:context=".MainActivity">   <com.google.android.material.appbar.AppBarLayout       android:layout_width="match_parent"       android:layout_height="wrap_content"       android:background="#ffffff"       >       <androidx.appcompat.widget.Toolbar           android:id="@+id/toolbar"           android:layout_width="match_parent"           android:layout_height="wrap_content"           android:background="#0FF1DD"           app:navigationIcon="@drawable/nav"           app:logo="@drawable/head2"           app:title="Rose-J"           app:subtitle="你好"/>   </com.google.android.material.appbar.AppBarLayout>    <com.google.android.material.navigation.NavigationView        android:id="@+id/navigationView"        android:layout_width="200dp"        android:layout_height="match_parent"        android:layout_gravity="left"        android:fitsSystemWindows="true"        app:headerLayout="@layout/headlayout"        app:menu="@menu/menu"/></androidx.drawerlayout.widget.DrawerLayout>

方法二,在activity里面通过java代码设置

    //去掉原标题        getSupportActionBar().setDisplayShowTitleEnabled(false);        //设置 左边 点击划出侧滑栏的图标       mToolbar.setNavigationIcon(R.drawable.nav);       //设置LOGO       mToolbar.setLogo(R.drawable.head2);       //设置主标题       mToolbar.setTitle("Rose-J");       //设置副标题       mToolbar.setSubtitle("Hello");

(旁边的图标是后面加的)
饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第10张图片

2.Menu

新建菜单 menu_toolbar

<?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/share"        android:icon="@drawable/share"        android:title="分享"        app:showAsAction="always|withText"/>    <item        android:id="@+id/check"        android:icon="@drawable/check"        android:title="扫一扫"        app:showAsAction="always|withText"/>    <item        android:id="@+id/item_1"        android:title="反馈"        app:showAsAction="never|withText"/>    <item        android:id="@+id/item_2"        android:title="更多"        app:showAsAction="never|withText"/></menu>

饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第11张图片

2.菜单item点击

饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第12张图片

public class MainActivity extends AppCompatActivity {    NavigationView mNavigationView;    DrawerLayout mDrawerLayout;    Toolbar mToolbar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mNavigationView=findViewById(R.id.navigationView);        mDrawerLayout=findViewById(R.id.drawerLayout);        mToolbar=findViewById(R.id.toolbar);         //使用ToolBar控件替代ActionBar控件        setSupportActionBar(mToolbar);        mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {            @Override            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {//菜单 item 监听                switch (menuItem.getItemId()) {                    case R.id.item_1:                        Log.i("Mainactivity","item_1");                        break;                    case R.id.item_2:                        Log.i("Mainactivity","item_2");                        break;                    case R.id.item_3:                        Log.i("Mainactivity","item_3");                        break;                }                mDrawerLayout.closeDrawer(GravityCompat.START);// 点击item 侧滑栏收回                return true;            }        });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.menu_toolbar, menu);        return super.onCreateOptionsMenu(menu);    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {            case R.id.share:                Toast.makeText(this,"分享成功",Toast.LENGTH_SHORT).show();                break;            case R.id.check:                Toast.makeText(this,"请对准二维码",Toast.LENGTH_SHORT).show();                break;            case R.id.item_1:                Toast.makeText(this,"反馈成功",Toast.LENGTH_SHORT).show();                break;            case R.id.item_2:                Toast.makeText(this,"加载中.....",Toast.LENGTH_SHORT).show();                break;            case android.R.id.home:                mDrawerLayout.openDrawer(GravityCompat.START);                break;            default:                break;        }        return super.onOptionsItemSelected(item);    }

如果 setSupportActionBar(mToolbar); 这个方法报错了
饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第13张图片

饭后Android 第一餐-NavigationView+Toolbar(NavigationView使用方法,菜单item监听,Toolbar使用方法,菜单item点击)_第14张图片

运行

好,关于NavigationView侧滑栏+Toolbar工具栏就讲到这里啦,欢迎小伙伴们指出问题和提出你的疑问,也希望能收到您更好的建议,谢谢您的阅读与支持,本讲就到这里啦

更多相关文章

  1. Android SQLite使用方法
  2. android UI设计,android ui开发,android 页面设计,android页面布
  3. Android UI开发第二十八篇——Fragment中使用左右滑动菜单
  4. 安卓表格布局android:collapseColumns,android:shrinkColumns和s
  5. 控件布局_RelativeLayout
  6. android 布局中 layout_gravity、gravity、orientation、layout_
  7. android中九宫格布局的实现
  8. Android的FrameLayout布局介绍

随机推荐

  1. Innotrends 宣布基于 Android(安卓)的 Ca
  2. 持久化修改Android模拟器的system分区
  3. Android(安卓)UnitTest
  4. Android(安卓)NDK开发环境搭建
  5. 解決 android studio更新失败的一种情况
  6. [置顶] android性能测试工具之dumpstate
  7. [Unity3D]Unity3D游戏开发之Unity与Andro
  8. Android(安卓)7.1编译问题 FAILED: /bin/
  9. Android推荐使用的尺寸单位dp和sp
  10. Android应用程序框架思路整理