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 中RecyclerView顶部刷新实现详解

    Android 中RecyclerView顶部刷新实现详解

    这篇文章主要介绍了Android 中RecyclerView顶部刷新实现详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-10-10
  • Android中ImageCropper矩形、圆形 裁剪框的实现方法

    Android中ImageCropper矩形、圆形 裁剪框的实现方法

    这篇文章主要给大家介绍了关于Android中ImageCropper矩形、圆形 裁剪框的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2018-07-07
  • Android onbackpressed实现返回键的拦截和弹窗流程分析

    Android onbackpressed实现返回键的拦截和弹窗流程分析

    很多网友不明白如何在Android平台上捕获Back键的事件,Back键是手机上的后退键,一般的软件不捕获相关信息可能导致你的程序被切换到后台,而回到桌面的尴尬情况,在Android上有两种方法来获取该按钮的事件
    2023-01-01
  • Android 集成 google 登录并获取性别等隐私信息的实现代码

    Android 集成 google 登录并获取性别等隐私信息的实现代码

    这篇文章主要介绍了Android 集成 google 登录并获取 性别等隐私信息,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Android 高仿QQ 沉浸式状态栏

    Android 高仿QQ 沉浸式状态栏

    这篇文章主要介绍了Android 高仿QQ 沉浸式状态栏的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • Android编程常用技巧实例总结

    Android编程常用技巧实例总结

    这篇文章主要介绍了Android编程常用技巧实例总结,包括Android对话框、分辨率、资源、字体等操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Android仿抖音右滑清屏左滑列表功能的实现代码

    Android仿抖音右滑清屏左滑列表功能的实现代码

    这篇文章主要介绍了Android仿抖音右滑清屏左滑列表功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 详解App保活技术实现

    详解App保活技术实现

    随着Android阵营的各大手机厂商对于续航的高度重视,两三年前的手机发布会更是把反保活作为一个系统的卖点,不断提出了各种反保活的方案,导致现在想实现应用保活简直难于上青天,甚至都需要一个团队来专门研究这个事情。本文将详细介绍App保活技术实现,给大家一个参考
    2021-06-06
  • Android编程实现简单的UDP Client实例

    Android编程实现简单的UDP Client实例

    这篇文章主要介绍了Android编程实现简单的UDP Client,结合实例形式分析了Android实现UDP Clinet客户端的实现技巧,需要的朋友可以参考下
    2016-04-04
  • android自定义窗口标题示例分享

    android自定义窗口标题示例分享

    这篇文章主要介绍了android自定义窗口标题示例,需要的朋友可以参考下
    2014-03-03

最新评论