1.导入BottomNavigationView组件(点击下载按钮,安装组件)

2.新建菜单

(1)app--->src-->main--->res ,选中res目录右击new--->android resource file ,按照如下图设置即可。

注意:File name 可以任意选择,不一定是menu,例如menu_main

(2)右击menu->new->Menu Resource file

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/item1"
android:title="主界面"
android:icon="@mipmap/ic_action_home"
></item>
<item
android:id="@+id/item2"
android:title="我"
android:icon="@mipmap/ic_action_me"
></item>
<item
android:id="@+id/item3"
android:title="查看"
android:icon="@mipmap/ic_action_explore"
></item>
<item
android:id="@+id/item4"
android:title="设置"
android:icon="@mipmap/ic_action_settings"
></item>
</menu>

3.将菜单添加到BottomNavigationView组件(在XML文件中编写代码)

app:menu="@menu/menu_main"

4.ViewPager实现多页面效果

<1>新建4个页面相应的xml文件

<2>新建4个java文件(MyFragment类继承Fragment类)

<3>MainActivity.java文件中利用适配器将ViewPager与MyFragment类连接在一起

5.源码

对应工程名为:test15

<1>XML文件

(1)主页面布局

用LinearLayout,上方的ViewPager占满剩余屏幕(android:layout_weight=”1”),下方BottomNavigationView 高度为wrap_content。

"app:menu="@menu/menu_main"将刚刚写的子项定义文件加载进来,android:background=”?android:attr/windowBackground”的效果是:当BottomNavigationView与上方内容同色时,会显示的一条分割线。

<?xml version="1.0" encoding="utf-8"?>
<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"> <android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/> <android.support.design.widget.BottomNavigationView
android:id="@+id/bottom1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:menu="@menu/menu_main" />
</LinearLayout>

(2)layout_page1.xml

<?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:gravity="center"
android:background="#ff0000"> <TextView
android:id="@+id/textView"
android:textSize="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是主界面" />
</LinearLayout>

<2>java后台代码

MyFragment.java

package com.lucky.test15;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; public class MyFragment1 extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.layout_page1,container,false);
return view;
}
}
MainActivity.java
package com.lucky.test15;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.internal.BottomNavigationMenuView;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem; import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
List<Fragment> fragments;
BottomNavigationView bottomNavigationView;
MenuItem menuItem; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager=findViewById(R.id.viewpager); //底部菜单导航栏与viewPager相交互
bottomNavigationView=findViewById(R.id.bottom1);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()){
//当点击到某子项,ViewPager就滑动到对应位置
case R.id.item1:
viewPager.setCurrentItem(0);
break;
case R.id.item2:
viewPager.setCurrentItem(1);
break;
case R.id.item3:
viewPager.setCurrentItem(2);
break;
case R.id.item4:
viewPager.setCurrentItem(3);
break;
}
return false;
}
}); fragments=new ArrayList<>();
fragments.add(new MyFragment1());
fragments.add(new MyFragment2());
fragments.add(new MyFragment3());
fragments.add(new MyFragment4()); Adapter adapter=new Adapter(getSupportFragmentManager(),fragments);
viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) { } //onPageSelected()方法只在滑动停止时调用,position滑动停止所在页面位置
@Override
public void onPageSelected(int position) {
if(menuItem!=null){
//将菜单子项设置为未选中状态
menuItem.setChecked(false);
}else{
//菜单项均未被选中时,获取菜单子项中的第一个,将其设置为选中状态
menuItem=bottomNavigationView.getMenu().getItem(0);
menuItem.setChecked(true);
}
menuItem=bottomNavigationView.getMenu().getItem(position);
menuItem.setChecked(true); } @Override
public void onPageScrollStateChanged(int i) { }
}); } private class Adapter extends FragmentPagerAdapter{ List<Fragment> list1;
public Adapter(FragmentManager fm,List<Fragment> fragments) {
super(fm);
this.list1=fragments;
} @Override
public Fragment getItem(int position) {
return list1.get(position);
} @Override
public int getCount() {
return list1.size();
} }
}

6.效果图

参考文献:https://blog.csdn.net/htwhtw123/article/details/78441431

014 Android BottomNavigationView 底部导航组件使用的更多相关文章

  1. Android应用底部导航栏(选项卡)实例

    现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能. 我们先看下该demo实例的框架图: 其 ...

  2. Android 修改底部导航栏navigationbar的颜色

    Android 修改底部导航栏navigationbar的颜色 getWindow().setNavigationBarColor(Color.BLUE); //写法一 getWindow().set ...

  3. 第三十七篇-BottomNavigationVIew底部导航的使用

    效果图: 添加底部导航和viewpaper 设置底部导航在底部 app:layout_constraintBottom_toBottomOf="parent" 新建四个fragme ...

  4. Android应用-底部导航栏的使用

    目录 1. 设计底部导航栏页面 1.1. 创建必须的文件夹 1.2. 设计主页面 2. 设计逻辑函数 3. 项目展示 底部导航栏是基于Bottom Navigation Bar 插件使用的 这个插件包 ...

  5. 【转】Android应用底部导航栏(选项卡)实例

    现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能. 我们先看下该demo实例的框架图: 其 ...

  6. BottomNavigationView(底部导航)

    BottomNavigationView 很早之前就在 Material Design 中出现了,但是直到 Android Support Library 25 中才增加了 BottomNavigat ...

  7. Android BottomNavigationBar底部导航控制器的使用(包含默认postion的设置)

    转载请标明出处:http://blog.csdn.net/u010046908/article/details/50962081本文出自:[李东的博客] 最近Google在自己推出的Material ...

  8. Android BottomNavigationBar底部导航控制器的使用

    最近Google在自己推出的Material design中增加了Bottom Navigation导航控制.Android一直没有官方的导航控制器,自己实现确实是五花八门,有了这个规定之后,就类似苹 ...

  9. android BottomNavigationView 底部显示3个以上的item

    你现在可以用app:labelVisibilityMode="[labeled, unlabeled, selected, auto] labeled 所有的标签都是可见的. unlabel ...

随机推荐

  1. Java中long和Long的区别

    Java的数据类型分两种: 1.基本类型:long,int,byte,float,double,char,short,boolean 2. 对象类型(类): Long,Integer,Byte,Flo ...

  2. Java,Calendar -- 获取当前日期、当月月初日期、月末日期

    public class CalendarTest { public static void main(String[] args) { // 获取当前年份.月份.日期 Calendar cale = ...

  3. Docker学习笔记_安装ActiveMQ

    一.实验环境 1.宿主机OS:Win10 64位 2.虚拟机OS:Ubuntu18.04,虚拟机名称:Ubuntu18VM1,虚拟机IP:192.168.8.25 3.操作账号 :Docker 4.在 ...

  4. linux(2)

  5. 第八课 ROS的空间描述和变换

    1.tf的实际应用 1)在机器人的配置中 从上面可以看出激光雷达中心距离机器人底座的中心有20cm,激光雷达的中心距机器人底座中心有10cm,如果激光雷达在障碍物前面0.3米,那么机器人底座离障碍物多 ...

  6. 常用eclipse插件

     http://dist.springsource.com/release/TOOLS/update/e4.4/ http://propedit.sourceforge.jp/eclipse/upda ...

  7. Requests接口测试(五)

    使用python+requests编写接口测试用例 好了,有了前几章的的基础,写下来我把前面的基础整合一下,来一个实际的接口测试练习吧. 接口测试流程 1.拿到接口的URL地址 2.查看接口是用什么方 ...

  8. javascript总结7:算术运算符

    1  运算符: 加号+ 如果是数字类型的变量相加,那么结果为数字类型; 如果是非数字类型的变量相加,结果为字符串类型 2  减号- 如果是非数字类型的变量相减结果为  NaN 3 乘号 * 如果是非数 ...

  9. (转)Asp.Net底层原理(三、Asp.Net请求响应过程)

    原文地址:http://www.cnblogs.com/liuhf939/archive/2013/09/16/3324753.html 在之前,我们写了自己的Asp.Net框架,对整个流程有了一个大 ...

  10. 关于 XML 字段内容查询

    找到个总结相当好的知识点的归纳,记在自己的博客里也方便查询 /* sql xml 入门:     --by jinjazz     --http://blog.csdn.net/jinjazz     ...