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

 

FragmentTabHost + Fragment

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

Android 底部导航栏_第1张图片

上代码咯

在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

 

Android 底部导航栏_第2张图片

加入个依赖

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 底部导航栏_第3张图片

 

在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 混淆代码有关问题总结
  3. Android 开发常用代码
  4. android imageView 图片显示方式属性
  5. Android程序实现全屏代码
  6. Android 为联系人添加图片
  7. Android之——史上最简单最酷炫的3D图片浏览效果的实现
  8. [原]Android有用代码片断(六)
  9. android shape 代码实现按钮背景

随机推荐

  1. Android全局捕获异常
  2. Android(安卓)Gradle中集成AspectJ
  3. Android(安卓)尺寸说明
  4. 值得收藏的 Android(安卓)Studio 插件
  5. WebView全屏播放h5视频
  6. android 之登录注册用户信息
  7. Android(安卓)在Xml控件中对应的颜色透明
  8. Android中静态实例的生命周期
  9. Android(安卓)系统编译环境设置及源代码
  10. studyjams notes 1B-- relative layout +