Android design包自定义tablayout的底部导航栏的实现方法

 更新时间:2017年01月03日 16:40:28   作者:初心不负  
这篇文章主要介绍了Android design包自定义tablayout的底部导航栏的实现方法,非常不错,具有参考借鉴价值,需要的朋友参考下

以前做项目大多用的radiobutton,今天用tablayout来做一个tab切换页面的的效果.

实现的效果就是类似QQ.微信的页面间(也就是Fragment间)的切换.如图:

这里写图片描述 

布局只要一个tablayout

<android.support.design.widget.TabLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/nav_tl"
    app:tabIndicatorHeight="0dp"//将指示器去掉 ps:如果大家对tablayout有一些样式上的需求
    可以自定义style,这里就不加了
    android:layout_gravity="bottom"
    ></android.support.design.widget.TabLayout>

然后就是activity了

public class MainActivity extends BaseActivity implements TabLayout.OnTabSelectedListener{
  @BindView(R.id.main_container)
  LinearLayout mainContainer;
  @BindView(R.id.nav_tl)
  TabLayout navTl;
  //Tab 文字
  private final int[] TAB_TITLES = new int[]{R.string.nav_home,R.string.nav_order,R.string.nav_my};
  //Tab 图片
  private final int[] TAB_IMGS = new int[]{R.drawable.nav_home_bg,R.drawable.nav_order_bg,R.drawable.nav_my_bg};
//贴出一个R.drawable.nav_home_bg的文件,其他类似:`<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_selected="true" android:drawable="@mipmap/nav_home_selected"></item>
  <item android:state_selected="false" android:drawable="@mipmap/nav_home_normal"></item>
</selector>`
  private FirstPagerFragment firstPagerFragment;
  private PersonalFragment personalFragment;
  private SeekOrderFragment seekOrderFragment;
  private android.support.v4.app.FragmentManager manager;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    iniView();
    iniData();
  }
  private void iniData() {
  }
  private void iniView() {
    LayoutInflater inflater = LayoutInflater.from(this);
    manager = getSupportFragmentManager();
    getTab(R.id.main_container,manager,0);
    setTabs(navTl,inflater,TAB_TITLES,TAB_IMGS);
    navTl.setOnTabSelectedListener(this);
  }
  /**
   * @description: 设置添加Tab
   * 我们自定义的布局customer_layout其实就是一张图片加文字
   * `<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical" android:layout_width="match_parent"
  android:layout_height="match_parent">
  <ImageView
    android:id="@+id/img_tab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    />
  <TextView
    android:id="@+id/tv_tab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:textColor="@drawable/tv_color_bg"//text我用了一个颜色选择器,主要在我选中的时候能改变颜色
    />
</LinearLayout>`
   */
  private void setTabs(TabLayout tabLayout, LayoutInflater inflater, int[] tabTitlees, int[] tabImgs) {
    for (int i = 0; i < tabImgs.length; i++) {
      TabLayout.Tab tab = tabLayout.newTab();
      View view = inflater.inflate(R.layout.customer_layout, null);
      tab.setCustomView(view);
      TextView tvTitle = (TextView) view.findViewById(R.id.tv_tab);
      tvTitle.setText(tabTitlees[i]);
      ImageView imgTab = (ImageView) view.findViewById(R.id.img_tab);
      imgTab.setImageResource(tabImgs[i]);
      tabLayout.addTab(tab);
    }
  }
  @Override
  public void onTabSelected(TabLayout.Tab tab) {
    getTab(R.id.main_container,manager,tab.getPosition());
  }
  @Override
  public void onTabUnselected(TabLayout.Tab tab) {
  }
  @Override
  public void onTabReselected(TabLayout.Tab tab) {
  }
  //设置tab的监听,选中某一个tab对应的Fragment要及时切换,相信大家看代码能看明白
  private void getTab(int container, android.support.v4.app.FragmentManager manager, int position){
    FragmentTransaction ft = manager.beginTransaction();
    hideAll(ft);
    switch (position){
      case 0:
        if(firstPagerFragment==null){
          firstPagerFragment=new FirstPagerFragment();
          ft.add(container,firstPagerFragment);
        }else {
          ft.show(firstPagerFragment);
        }
        break;
      case 1:
        if(seekOrderFragment==null){
          seekOrderFragment=new SeekOrderFragment();
          ft.add(container,seekOrderFragment);
        }else {
          ft.show(seekOrderFragment);
        }
        break;
      case 2:
        if(personalFragment==null){
          personalFragment=new PersonalFragment();
          ft.add(container,personalFragment);
        }else {
          ft.show(personalFragment);
        }
        break;
    }
    ft.commit();
  }
  private void hideAll(FragmentTransaction ft) {
    if(firstPagerFragment!=null){
      ft.hide(firstPagerFragment);
    }
    if(personalFragment!=null){
      ft.hide(personalFragment);
    }
    if(seekOrderFragment!=null){
      ft.hide(seekOrderFragment);
    }
  }
}

以上所述是小编给大家介绍的Android design包自定义tablayout的底部导航栏的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Android 中TabLayout自定义选择背景滑块的实例代码

    Android 中TabLayout自定义选择背景滑块的实例代码

    TabLayout是Android 的Material Design包中的一个控件,可以和V4包中的ViewPager搭配产生一个联动的效果。接下来通过本文给大家分享TabLayout自定义选择背景滑块的实例代码,感兴趣的朋友一起学习吧
    2016-10-10
  • 在Flutter中让文字Text换行的实现步骤

    在Flutter中让文字Text换行的实现步骤

    在Flutter中,Text小部件默认会尝试在其父小部件的约束内显示所有文本内容,如果父小部件没有提供足够的空间或没有设置约束限制,Text小部件可能无法正确换行,本文给大家介绍了在Flutter中如何让文字Text换行,需要的朋友可以参考下
    2024-07-07
  • Android开发Jetpack组件Room用例讲解

    Android开发Jetpack组件Room用例讲解

    这篇文章主要为大家介绍了Android Jetpack组件Room的使用案例的详细讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • Android开发中MotionEvent坐标获取方法分析

    Android开发中MotionEvent坐标获取方法分析

    这篇文章主要介绍了Android开发中MotionEvent坐标获取方法,结合实例形式分析了MotionEvent获取坐标的相关函数使用方法与相关注意事项,需要的朋友可以参考下
    2016-02-02
  • Android自定义View实现五子棋小游戏

    Android自定义View实现五子棋小游戏

    这篇文章主要为大家详细介绍了Android自定义View实现五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Android中微信抢红包助手的实现详解

    Android中微信抢红包助手的实现详解

    本篇文章主要介绍了Android中微信抢红包助手的实现详解,通过利用AccessibilityService辅助服务,监测屏幕内容,如监听状态栏的信息,屏幕跳转等,以此来实现自动拆红包的功能,有兴趣的可以了解一下。
    2017-02-02
  • Android调用微信登陆、分享、支付

    Android调用微信登陆、分享、支付

    这篇文章主要介绍了Android调用微信登陆、分享、支付的相关资料,需要的朋友可以参考下
    2015-12-12
  • Android OkHttp代理与路由的彻底理解

    Android OkHttp代理与路由的彻底理解

    这篇文章主要为大家介绍了Android OkHttp代理与路由的彻底理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Android自定义View仿支付宝芝麻信用分仪表盘

    Android自定义View仿支付宝芝麻信用分仪表盘

    前几天支付宝刚刚升级到v9.9,看了一眼里面的芝麻信用分,仪表盘挺好看的,所以想着来写一个这个版本的仪表盘,不说完全一模一样,只是为了猜测支付宝在做这个的时候是如何设计的,在此记录一下,有需要的可以参考借鉴。
    2016-09-09
  • Android ViewPager制作新手导航页(动态加载)

    Android ViewPager制作新手导航页(动态加载)

    这篇文章主要为大家详细介绍了Android ViewPager制作新手导航页,了解什么是动态加载指示器,感兴趣的小伙伴们可以参考一下
    2016-05-05

最新评论