一. BottomNavgationBar简介
- 鉴于官方BottomNavigationView还不是很完善,在此就先使用大佬们做的第三方库
- 本文讲的是Ashok-Varma的BottomNavigation
- 先看效果:
FIXED+STATIC
FIXED+RIPPLE
SHIFTING+RIPPLE
2.3使用步骤
- 在build.gradle里面添加
compile 'com.ashokvarma.android:bottom-navigation-bar:1.4.1'//版本号可能会更新,以具体更新为准
- xml中使用控件
<com.ashokvarma.bottomnavigation.BottomNavigationBar
android:id="@+id/bottom_nav_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary">
</com.ashokvarma.bottomnavigation.BottomNavigationBar>
- 样式配置
/*1.首先进行fvb*/
bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_nav_bar);
/*2.进行必要的设置*/
bottomNavigationBar.setBarBackgroundColor(R.color.colorPrimary);
bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_RIPPLE);
bottomNavigationBar.setMode(BottomNavigationBar.MODE_SHIFTING);//适应大小
/*3.添加Tab*/
bottomNavigationBar.addItem(new BottomNavigationItem(
R.drawable.listen_fill,R.string.bottom_nav_home)
.setInactiveIconResource(R.drawable.listen)
.setActiveColorResource(R.color.colorPrimary))
.addItem(new BottomNavigationItem(
R.drawable.speech_fill,R.string.bottom_nav_like)
.setInactiveIconResource(R.drawable.speech)
.setActiveColorResource(R.color.colorPrimaryDark))
.addItem(new BottomNavigationItem(
R.drawable.social_fill,R.string.bottom_nav_location)
.setInactiveIconResource(R.drawable.social)
.setActiveColorResource(R.color.yellow))
.addItem(new BottomNavigationItem(
R.drawable.profile_fill,R.string.bottom_nav_person)
.setInactiveIconResource(R.drawable.profile)
.setActiveColorResource(R.color.colorAccent))
.setFirstSelectedPosition(0)//默认显示面板
.initialise();//初始化
- PS:当Background为
BACKGROUND_STYLE_RIPPLE
的时候,背景颜色设置会无效,这时背景颜色会体现在setActiveColor()的设置上面* - 监听器配置
- 实现
BottomNavigationBar.OnTabSelectedListener
接口 - 重载方法
/*Tab被选中(position为当前被选中的Tab)*/
@Override
public void onTabSelected(int position) {
}
/*Tab被取消选中(position为当前被选中的Tab)*/
@Override
public void onTabUnselected(int position) {
}
/*Tab被重新选中(position为当前被选中的Tab)*/
@Override
public void onTabReselected(int position) {
}
- 重载方法里实现需要的逻辑(一般就是开启transaction进行fragment的切换)
三. 源码
- xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="cn.foxnickel.bottomnavdemo.MainActivity">
<include layout="@layout/content_main"/>
<com.ashokvarma.bottomnavigation.BottomNavigationBar
android:id="@+id/bottom_nav_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/colorPrimary">
</com.ashokvarma.bottomnavigation.BottomNavigationBar>
</RelativeLayout>
- MainActivity
package cn.foxnickel.bottomnavdemo;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import com.ashokvarma.bottomnavigation.BottomNavigationBar;
import com.ashokvarma.bottomnavigation.BottomNavigationItem;
import cn.foxnickel.bottomnavdemo.fragment.ListenFragmet;
import cn.foxnickel.bottomnavdemo.fragment.ProfileFragmet;
import cn.foxnickel.bottomnavdemo.fragment.SocialFragmet;
import cn.foxnickel.bottomnavdemo.fragment.SpeechFragmet;
public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener{
private BottomNavigationBar bottomNavigationBar;
private ListenFragmet listenFragmet;
private SpeechFragmet speechFragmet;
private SocialFragmet socialFragmet;
private ProfileFragmet profileFragmet;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initBottomNavBar();
initTab();
bottomNavigationBar.setTabSelectedListener(this);
}
private void initBottomNavBar(){
/*1.首先进行fvb*/
bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_nav_bar);
/*2.进行必要的设置*/
bottomNavigationBar.setBarBackgroundColor(R.color.colorPrimary);
bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_RIPPLE);
bottomNavigationBar.setMode(BottomNavigationBar.MODE_SHIFTING);//适应大小
/*3.添加Tab*/
bottomNavigationBar.addItem(new BottomNavigationItem(
R.drawable.listen_fill,R.string.bottom_nav_home)
.setInactiveIconResource(R.drawable.listen)
.setActiveColorResource(R.color.colorPrimary))
.addItem(new BottomNavigationItem(
R.drawable.speech_fill,R.string.bottom_nav_like)
.setInactiveIconResource(R.drawable.speech)
.setActiveColorResource(R.color.colorPrimaryDark))
.addItem(new BottomNavigationItem(
R.drawable.social_fill,R.string.bottom_nav_location)
.setInactiveIconResource(R.drawable.social)
.setActiveColorResource(R.color.yellow))
.addItem(new BottomNavigationItem(
R.drawable.profile_fill,R.string.bottom_nav_person)
.setInactiveIconResource(R.drawable.profile)
.setActiveColorResource(R.color.colorAccent))
.setFirstSelectedPosition(0)//默认显示面板
.initialise();//初始化
}
private void initTab(){
listenFragmet = new ListenFragmet();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.content_main,listenFragmet);
transaction.commit();
}
@Override
public void onTabSelected(int position) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
switch (position){
case 0:
if(listenFragmet == null){
listenFragmet = new ListenFragmet();
}
transaction.replace(R.id.content_main,listenFragmet);
break;
case 1:
if(speechFragmet == null){
speechFragmet = new SpeechFragmet();
} transaction.replace(R.id.content_main,speechFragmet);
break;
case 2:
if(socialFragmet == null){
socialFragmet = new SocialFragmet();
}
transaction.replace(R.id.content_main,socialFragmet);
break;
case 3:
if(profileFragmet == null){
profileFragmet = new ProfileFragmet();
}
transaction.replace(R.id.content_main,profileFragmet);
break;
}
transaction.commit();
}
@Override
public void onTabUnselected(int position) {
}
@Override
public void onTabReselected(int position) {
}
}
网友评论