BottomNavigationVie 底部导航栏实现方式多样化 Material Design

在这里插入图片描述
前沿 距Google I/O(2014)最新发布的 Material Design Android 设计风格已经有一段时间了, 2016年Google在 Android Design Support Library 25基础上增加了 一个BottomNavigationView 新控件,相比之前实现导航栏的方式,如LinearLayout + TextView(使用android:drawableTop属性+selector状态切换)、LinearLayout + RelativeLayout(TextView+ImageView)
RadioGroup + RadioButton,2015年Google推出的兼容包Android Design Support Library中的TabLayout等,该控件提供更简洁的方式实现功能模块导航,符合材料设计规范,效果图如下:
在这里插入图片描述
BottomNavigationView 继承自 FrameLayout,
对外暴露了OnNavigationItemSelectedListener接口,便于对子视图点击事件的处理,可以通过此接口动态改变文字颜色 和图标颜色。

在XML中需要了解其以下属性
(记得添加 xmlns:app=“http://schemas.android.com/apk/res-auto”)
app:itemIconTint : 设置图标着色
app:itemTextColor : 设置文本颜色
app:menu : 设置菜单
app:itemBackground : 设置导航栏的背景色

默认该控件图标、文本都使用系统自带的@color/colorPrimary颜色 需要注意的是源码中明确指出最大子View个数不能超过5个,在子View个数大于等于4的时候 只有选中的显示文字,没有选中的只显示图标,并且会显示自带的动画,貌似看起来有些浮夸。

在源码BottomNavigationMenuView中,有一个全局变量:mShiftingMode, private boolean mShiftingMode = true;在创建、更新Menu的时候调用了buildMenuView()方法

public void buildMenuView() {
mShiftingMode = mMenu.size() > 3;
}

具体效果图如下:
在这里插入图片描述
下面使用BottomNavigationView+ViewPager+Fragment组合实现 导航展示界面 真机5.0.2测试

使用前打开build.gradle 添加依赖

//可以修改为你项目中对应的版本号 建议修改与 compile ‘com.android.support:appcompat-v7:25.0.0’ 相同的版本号
compile ‘com.android.support:design:25.0.0’

首先在Res目录下创建一个menu文件夹,并新建一个activity_main_bottom.xml

<?xml version="1.0" encoding="utf-8"?>

<item
    android:id="@+id/love"
    android:icon="@drawable/ic_favorite_white_24dp"
    android:title="喜欢" />
<item
    android:id="@+id/video"
    android:icon="@drawable/ic_videogame_asset_white_24dp"
    android:title="视频" />


<item
    android:id="@+id/book"
    android:icon="@drawable/ic_book_white_24dp"
    android:title="订阅" />


<item
    android:id="@+id/github"
    android:icon="@drawable/ic_github_circle_white_24dp"
    android:title="Github" />

MainActivity XML定义如下:

<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.9" />


<android.support.design.widget.BottomNavigationView
    android:id="@+id/main_bottom_nav_bar"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.1"
    android:background="@android:color/white"
    app:itemIconTint="#be4c00"
    app:itemTextColor="#be4c00"
    app:menu="@menu/activity_main_bottom"
    />

BaseActivity基类简单封装如下:

public abstract  class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(getLayoutViewId());
    //initView
    initView();
    //initData
    initData();
    //initListener
    initListener();
}
protected abstract void initListener();
protected abstract void initData();
protected abstract void initView();

// UI  View Layout
protected abstract    @LayoutRes  int getLayoutViewId();
//get View ID
public <T extends  View> T getViewId(int id){
    View view=getWindow().getDecorView().findViewById(id);
    return (T) view;
}

}

MainActivity代码如下:

 package com.createfuture.android.guidenavigationbar;
 import android.annotation.SuppressLint;
 import android.content.res.ColorStateList;
 import android.graphics.Color;
 import android.os.Build;
 import android.support.annotation.NonNull;
 import android.support.annotation.RequiresApi;
 import android.support.design.internal.BottomNavigationItemView;
 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.util.Log;
 import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.view.View;
 import android.widget.Toast;
import com.createfuture.android.md50.R;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends BaseActivity implements             BottomNavigationView.OnNavigationItemSelectedListener,
    ViewPager.OnPageChangeListener {
    
private ViewPager viewPager;//实现左右滑动的ViewPager
private ViewPager viewPager;//实现左右滑动的ViewPager
private BottomNavigationView bottomNavigationView;//底部导航栏
private List<Fragment> myFragment = new ArrayList<>();//存放Fragment集合
private String[] mTiltls = new String[]{"首页", "喜欢", "视频", "订阅", "Github"};
private long currentTime = 0;

@Override
protected int getLayoutViewId()
{
    return R.layout.activity_
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值