开篇:
今天要介绍的BottomNavigationBar这个控件,是
Google官方在自己推出的Material design中增加的底部导航。
导入依赖:
compile 'com.ashokvarma.android:bottom-navigation-bar:2.0.2'
XML文件布局:
<?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="com.example.administrator.mydemo.MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/tb_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我的demo集合"
android:textColor="#080808"
android:textSize="22sp"
android:layout_gravity="center"/>
</android.support.v7.widget.Toolbar>
<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
>
</FrameLayout>
<com.ashokvarma.bottomnavigation.BottomNavigationBar
android:id="@+id/bottom_navigation_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:bnbActiveColor="@color/btn_normal"
/>
</LinearLayout>
过渡独白:这里要新建三个fragment(根据你的需求而定),FastJsonFragment GsonFragment JsonFragment
Java代码
本工具类的作用,为了方便管理Fragment
设置static的作用是在程序运行时就创建好该类并可以使用,为mainactivity的方法提供值
*/
public class Fragmentfactory {
private static FastJsonFragment fastJsonFragment=null;
private static GsonFragment gsonFragment=null;
private static JSonFragment jSonFragment=null;
public static Fragment getFragment(int postin){
switch (postin){
case 0:
if (jSonFragment==null){
jSonFragment=new JSonFragment();
}
return jSonFragment;
case 1:
if (gsonFragment==null){
gsonFragment=new GsonFragment();
}
return gsonFragment;
case 2:
if (fastJsonFragment==null){
fastJsonFragment=new FastJsonFragment();
}
return fastJsonFragment;
}
return jSonFragment;
}
}
MainActivity
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import com.ashokvarma.bottomnavigation.BottomNavigationBar;
import com.ashokvarma.bottomnavigation.BottomNavigationItem;
import com.example.administrator.mydemo.Utils.Fragmentfactory;
import java.util.List;
public class MainActivity extends AppCompatActivity {
Toolbar toolbar;
BottomNavigationBar bottomNavigationBar;
String []title={"JSon原生","Gson","FastJson"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar= (Toolbar) findViewById(R.id.tb_toolbar);
bottomNavigationBar= (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
InToolbar();
initBottomBar();
initFirstFragment();
}
//初始化顶部导航栏
private void InToolbar() {
toolbar.setTitle("");
setSupportActionBar(toolbar);
}
private void initFirstFragment() {
//使用fragmentTransaction.hide和show可能会导致重影
FragmentManager fragmentManager=getSupportFragmentManager(); //v4包里的类
List<Fragment> fragments=fragmentManager.getFragments();//获取有多少个fragment,并且添加到list集合里面
if (fragments!=null&&fragments.size()>0){ //当list集合里面的fragment对象不为空,且fragment对象个数大于0时,执行
for (Fragment fragment:fragments){ // 容器中元素类型 临时变量 :容器变量 foreach循环会自动遍历容器中每个元素
FragmentTransaction fragmentTransaction=getSupportFragmentManager().beginTransaction();
//移除残留的fragment
fragmentTransaction.remove(fragment);
//提交并保存
fragmentTransaction.commit();
}
}
//进入时默认显示第一个fragment界面
FragmentTransaction fragmentTransaction=getSupportFragmentManager().beginTransaction();
Fragment fragment=Fragmentfactory.getFragment(0);
fragmentTransaction.add(R.id.fl_container,fragment);
fragmentTransaction.commit();
}
//初始化底部导航栏
private void initBottomBar() {
bottomNavigationBar.addItem(new BottomNavigationItem(R.mipmap.yun,title[0]))
.addItem(new BottomNavigationItem(R.mipmap.ff,title[1]))
.addItem(new BottomNavigationItem(R.mipmap.ufo,title[2]))
.initialise();
bottomNavigationBar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener() {
//当点击进入这个fragment
@Override
public void onTabSelected(int position) {
//获取fragment对象
Fragment fragment= Fragmentfactory.getFragment(position);
//创建fragment管理器
FragmentManager fm=getSupportFragmentManager();
//获取fragment事务
FragmentTransaction transaction=fm.beginTransaction();
//判断fragment是否添加
if (!fragment.isAdded()){ //如果没有添加,进行添加到activity
transaction.add(R.id.fl_container,fragment);
}else { //添加了,就进行显示
transaction.show(fragment);
}
//保存并提交
transaction.commit();
}
//从这个fragment离开
@Override
public void onTabUnselected(int position) {
Fragment fragment=Fragmentfactory.getFragment(position);
FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
//离开tab.进行隐藏
transaction.hide(fragment);
transaction.commit();
}
@Override
public void onTabReselected(int position) {
}
});
}
}
一个Fragment使用一般有的步骤:
1.创建Fragment对象
MyFragment fragment=new MyFragment();
2.获取到Fragment 管理器
FragmentManager supportFragmentManager = getSupportFragmentManager();
3.开启fragment事务
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
4.添加fragment到activity
fragmentTransaction.add(R.id.fl_container,fragment);
5.fragment显示
fragmentTransaction.show(fragment);
6.fragment隐藏
fragmentTransaction.hide(fragment);
7判断fragment是否添加
fragment.isAdded()
8.fragment保存并提交,必要的结束
fragmentTransaction.commit();
这样一个底部导航就实现了,没有什么复杂的逻辑关系,很简单。。。。。。