最近看了些导航栏,想更新下自己的知识,简单记录下三个底部导航栏的实现方式

 

FragmentTabHost + Fragment

这个是我自己用得最多的,感觉蛮好用的~

上代码咯

在FragmentTabHost代码中两个ID android:id="@android:id/tabhost"  android:id="@android:id/tabcontent"这个是必须这两个固定的
<?xml version="1.0" encoding="utf-8"?>                    

activity的代码

public class ActivityF extends AppCompatActivity {    private List tabs;    private FragmentTabHost tabHost;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.act_first);        initTab();    }    private void initTab() {        tabHost=(FragmentTabHost)findViewById(android.R.id.tabhost);        tabs=new ArrayList<>();        Tabhosts tabHost1 = new Tabhosts("First",Fragment1.class);        Tabhosts tabHost2 = new Tabhosts("Second",Fragment2.class);        tabs.add(tabHost1);        tabs.add(tabHost2);        tabHost.setup(this,getSupportFragmentManager(),R.id.fragment);        for (Tabhosts tab:tabs){            TabHost.TabSpec tabSpec=tabHost.newTabSpec(tab.getName());// TabSpec : 选项卡            tabSpec.setIndicator(bindView(tab));            tabHost.addTab(tabSpec,tab.getClazs(),null);        }        tabHost.getTabWidget().setShowDividers(LinearLayout.SHOW_DIVIDER_NONE);//分割线        tabHost.setCurrentTabByTag(tabHost1.getName());//默认第一个    }    private View bindView(Tabhosts tab) {  //设置Indicator中的View        View view=LayoutInflater.from(this).inflate(R.layout.tab,null);        TextView textView=view.findViewById(R.id.tvtab);        textView.setText(tab.getName());        return view;    }}

自定义Tabhosts

package com.screen.www.fragmentdemo.tabhost;public class Tabhosts {    private String name;    private Class clazs;    public Tabhosts(String name, Class clazs) {        this.name = name;        this.clazs = clazs;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Class getClazs() {        return clazs;    }    public void setClazs(Class clazs) {        this.clazs = clazs;    }}

TabLayout + Fragment

 

加入个依赖

implementation 'com.android.support:design:27.1.1'

这个更加好实现

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

activity

BaseViewPage 在项目中是分开的,懒~~~  大致就这样就可以实现了

public class ActivityS extends AppCompatActivity{    ViewPager viewPager;    TabLayout tabLayout;    List list;    String array[]={"First","Second"};    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.act_seconds);        initView();    }    private void initView() {        viewPager=(ViewPager)findViewById(R.id.viewPager);        tabLayout=(TabLayout)findViewById(R.id.tablayout);        list=new ArrayList<>();        Fragment1 fragment1=new Fragment1();        Fragment2 fragment2=new Fragment2();        list.add(fragment1);        list.add(fragment2);        BaseViewPage vpadpater=new BaseViewPage(getSupportFragmentManager(),list,array);        viewPager.setAdapter(vpadpater);        tabLayout.setupWithViewPager(viewPager);    }public class BaseViewPage extends FragmentPagerAdapter {    List mList;    String [] mNames;    public BaseViewPage(FragmentManager fm, List list,String [] names) {        super(fm);        mList=list;        mNames=names;    }    @Override    public Fragment getItem(int position) {        Fragment fragment=null;        if(position

BottomNavigationBar + Fragment

 

 

在Android Studio下添加依赖:

 implementation 'com.ashokvarma.android:bottom-navigation-bar:2.0.2'

xml的这个,注意不是BottomNavigationView ,一开始写错了,笑哭

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

activity

package com.screen.www.fragmentdemo.bomnav;import android.os.Bundle;import android.support.annotation.Nullable;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.util.Log;import com.ashokvarma.bottomnavigation.BottomNavigationBar;import com.ashokvarma.bottomnavigation.BottomNavigationItem;import com.screen.www.fragmentdemo.Fragment1;import com.screen.www.fragmentdemo.Fragment2;import com.screen.www.fragmentdemo.R;import java.util.ArrayList;import java.util.List;public class ActivityT extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener {    BottomNavigationBar bnavBar;    Fragment1 fragment1;    Fragment2 fragment2;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.act_three);        initView();    }    private void initView() {        bnavBar = (BottomNavigationBar) findViewById(R.id.bomnav);        bnavBar.addItem(new BottomNavigationItem(R.mipmap.ic_launcher, "First"))                .addItem(new BottomNavigationItem(R.mipmap.ic_launcher, "Second"))                .setFirstSelectedPosition(0)                .initialise();        setDefault();        bnavBar.setTabSelectedListener(this);    }    FragmentManager fragmentManager;    private void setDefault() {        FragmentManager manager = getSupportFragmentManager();        FragmentTransaction ft = manager.beginTransaction();        fragment1 = new Fragment1();        ft.add(R.id.flayout3, fragment1);        ft.commit();    }    @Override    public void onTabSelected(int position) {        fragmentManager = this.getSupportFragmentManager();        FragmentTransaction ft = fragmentManager.beginTransaction();        switch (position) {            case 0:                if (fragment1 == null) {                    fragment1 = new Fragment1();                    ft.add(R.id.flayout3, fragment1).hide(fragment2);                } else {                    ft.show(fragment1).hide(fragment2);                }                break;            case 1:                if (fragment2 == null) {                    fragment2 = new Fragment2();                    ft.add(R.id.flayout3, fragment2).hide(fragment1);                } else {                    ft.show(fragment2).hide(fragment1);                }                break;        }        ft.commit();    }    @Override    public void onTabUnselected(int position) {    }    @Override    public void onTabReselected(int position) {    }}

大致就是三种,至于fragment1和fragment2,随便做个模板就OK了

除此之外记得还有这两种:

BottomNavigationView + Fragment

RadioGroup + Fragment

可能还有些其他,需要以后再补上

 

Demo

 

更多相关文章

  1. android boot 代码流程 1
  2. Android(安卓)JNI使用方法
  3. android shape实现边框圆角
  4. Android(安卓)开发常用代码
  5. 《Android》Lesson17-用Fragment实现简易新闻应用1
  6. Android(安卓)混淆代码有关问题总结
  7. android UI进阶之弹窗的使用(2)--实现通讯录的弹窗效果
  8. android JNI 学习笔记1
  9. Android(安卓)WebView详解(二):Android原生与JS互调

随机推荐

  1. 随Android生命周期解绑Rxjava订阅的简单
  2. 我在Android开发中遇到的坑之微博正文点
  3. Android中AS创建点9图片与使用
  4. 源码阅读分析 - View的Touch事件分发
  5. 最火的Android开源项目(二)
  6. 基于Android的记事本的设计与开发(实验报
  7. Android应用程序支持安装到SD卡
  8. 懒得理 iPhone X 小米拟明年出三防手机!
  9. Android自定义导览地图组件(一)
  10. Android获取手机设备信息并区分真机与模