以前做项目大多用的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要及时切换,相信大家看html" target="_blank">代码能看明白 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的底部导航栏的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍Flutter底部导航栏的实现方式,包括了Flutter底部导航栏的实现方式的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Flutter底部导航栏的实现代码,供大家参考,具体内容如下 老规格,先看图: 程序主结构如下: 1.在程序主入口文件main.dart添加如下代码 2.创建4个界面,home_page.dart、constant_page.dart、find_p
本文向大家介绍Flutter实现底部导航栏,包括了Flutter实现底部导航栏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Flutter实现底部导航栏的具体代码,供大家参考,具体内容如下 效果 实现 先将自动生成的main.dart里面的代码删除, 创建app.dart作为首页的页面文件 创建today.dart、kb.dart、playground.dart三个页面文件作为ta
本文向大家介绍android实现底部导航栏,包括了android实现底部导航栏的使用技巧和注意事项,需要的朋友参考一下 底部导航栏我选择用FragmentTabHost+Fragment来实现,这个方法比较好用,代码量也不多 首先是开始的activity_main.xml 也可以直接在xml文件里面写 这xml文件就一个view加一个tab view用来显示碎片,tab用来放置底部按钮的数量 再
本文向大家介绍Flutter实现底部导航栏效果,包括了Flutter实现底部导航栏效果的使用技巧和注意事项,需要的朋友参考一下 大家最近都在讨论新鲜技术-flutter,小编也在学习中,遇到大家都遇到的问题,底部导航。下面给大家贴出底部导航的编写,主要参考了lime这个项目。 上代码 一.在main.dart文件中 定义APP的基本信息 其中主要代码部分 其中,各个页面的主要声明 底部导航栏的内容
本文向大家介绍Android实现底部导航栏功能,包括了Android实现底部导航栏功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android实现底部导航栏功能的具体代码,供大家参考,具体内容如下 实验效果: (1)在drawable文件夹下新建tab_menu_bg.xml文件,具体代码如下: (2)在drawable文件夹下新建tab_menu_text.xml文件,具
本文向大家介绍Android实现底部导航栏的主界面,包括了Android实现底部导航栏的主界面的使用技巧和注意事项,需要的朋友参考一下 在主流app中,应用的主界面都是底部含有多个标签的导航栏,点击可以切换到相应的界面,如图: 接下来将描述下其实现过程。 1.首先是分析界面,底部导航栏我们可以用一个占满屏幕宽度、包裹着数个标签TextView、方向为横向horizontal的线性布局LinearL