BottomNavigationView 的简单使用

BottomNavigationView是Google发布的一个底部导航栏的实现,首先看一下效果图

x1

在导航栏的选项超过3个时,将会隐藏未选中的选项的标题,如图
x2

接下来就简单的使用一下这个底部导航栏吧

0X01 在 build.gradle 中引入 design 包

在APP内的 guild.gradle 的 dependencies 中插入
compile 'com.android.support:design:25.3.1'

0X02 在 menu 中建立 item 选项

item 是导航栏里的选项

0x01

在 res 文件夹下新建 menu 文件夹

0x02

在 menu 文件夹下建立 item.xml

这里我建立的是 navigation.xml

0x03

在 item.xml 里添加 item,xml 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/navigation_home"
        android:icon="@drawable/ic_home_black_24dp"
        android:title="主页" />

    <item
        android:id="@+id/navigation_community"
        android:icon="@drawable/ic_favorite_black_24dp"
        android:title="社区" />

    <item
        android:id="@+id/navigation_notifications"
        android:icon="@drawable/ic_notifications_black_24dp"
        android:title="消息" />

    <item
        android:id="@+id/navigation_me"
        android:icon="@drawable/ic_person_black_24dp"
        android:title="个人" />
</menu>

这里的icon是用的AS自带的image,需要新建 Vector Asset,具体步骤:

0x03.1

这是右键菜单

0x03.2

点击 icon 图标

0x03.3

选到你想要的图标后点 next ,再点 finish ,然后就可以在代码里调用这个图标了

1X01 在布局 XML 中插入 BottomNavigationView

因为它是底部导航栏,那么就把他放在布局的最下面,这里我用的 LinearLayout ,选垂直布局,
TextView 的高度是按权重获得最大高度,让他占满除Navigation以外的所有空间,详细代码:

<?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"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="cc.jethro.bottomnavigationviewtest.MainActivity">

    <TextView
        android:padding="16dp"
        android:id="@+id/content_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="主页"
        android:textSize="40dp"/>


    <android.support.design.widget.BottomNavigationView
        android:background="?android:attr/windowBackground"
        android:id="@+id/navigation_view"
        app:menu="@menu/navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </android.support.design.widget.BottomNavigationView>

</LinearLayout>

1X02 在 Activity 中对 navigation 进行配置

package cc.jethro.bottomnavigationviewtest;

import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView textView ;
    BottomNavigationView navigationView ; //底部导航栏view

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.content_view);


        navigationView = (BottomNavigationView) findViewById(R.id.navigation_view);

        //为navigation设置监听
        navigationView.setOnNavigationItemSelectedListener(
                new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {

                switch (item.getItemId()) { //读取选择的item的id

                    case R.id.navigation_home: //当选中的item的id是 navigation_home 时,把text设置为主页
                        textView.setText("主页");//id是在menu下建立item时申明的
                        break;
                    case R.id.navigation_community: //当选中的item的id是 navigation_community 时,把text设置为社区
                        textView.setText("社区");
                        break;
                    case R.id.navigation_notifications:
                        textView.setText("消息");
                        break;
                    case R.id.navigation_me:
                        textView.setText("个人");
                        break;
                }

                return true; //一定要返回true,否则会选择不了item
            }
        });
    }
}

OK 就这么简单,下一篇文章将结合fragment进行进阶使用

添加新评论