底部导航栏(Bottom Navigation Bar)是一种常见的导航方式,它位于应用界面的底部,用户可以通过点击不同的标签来实现页面之间的切换,在Android开发中,底部导航栏的使用非常广泛,下面我们将详细介绍几种常见的底部导航栏切换方式。

站在用户的角度思考问题,与客户深入沟通,找到五龙口网站设计与五龙口网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、成都网站建设、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广、申请域名、虚拟空间、企业邮箱。业务覆盖五龙口地区。
1、添加依赖
在项目的build.gradle文件中添加ViewPager2的依赖:
dependencies {
implementation 'androidx.viewpager2:viewpager2:1.0.0'
}
2、创建布局文件
在activity_main.xml布局文件中添加ViewPager2控件:
3、创建FragmentPagerAdapter和Fragment类
创建一个继承自FragmentStateAdapter的FragmentPagerAdapter类:
public class MainFragmentPagerAdapter extends FragmentStateAdapter {
private List fragmentList;
private List fragmentTitleList;
public MainFragmentPagerAdapter(@NonNull FragmentManager manager, int resourceId, @NonNull List fragments, @NonNull List titles) {
super(manager, resourceId);
this.fragmentList = fragments;
this.fragmentTitleList = titles;
}
@NonNull
@Override
public Fragment createFragment(int position) {
return fragmentList.get(position);
}
@Override
public int getItemCount() {
return fragmentList.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return fragmentTitleList.get(position);
}
}
创建对应的Fragment类,例如HomeFragment、ProfileFragment等。
4、在Activity中设置ViewPager2和Adapter
public class MainActivity extends AppCompatActivity {
private ViewPager2 viewPager;
private MainFragmentPagerAdapter adapter;
ListView listView; // 需要隐藏的ListView,用于显示选中的标签背景色和文字颜色等样式信息,具体实现请参考下面的代码。
TextView tvCurrentPage; // 需要隐藏的TextView,用于显示当前选中的标签页索引,具体实现请参考下面的代码。
ImageView imgSelectedTab; // 需要隐藏的ImageView,用于显示选中的标签的图标,具体实现请参考下面的代码。
LinearLayout tabContainer; // 需要隐藏的LinearLayout,用于容纳所有的底部标签,具体实现请参考下面的代码。
int currentIndex = 0; // 标签页的当前索引,初始值为0,表示首页,可以根据需要进行修改,具体实现请参考下面的代码。
int selectedColor = Color.BLUE; // 标签页被选中时的背景色,具体实现请参考下面的代码。
int unselectedColor = Color.GRAY; // 标签页未被选中时的背景色,具体实现请参考下面的代码。
int textColorPrimary = Color.WHITE; // 标签页的文字颜色,具体实现请参考下面的代码。
int textSizePrimary = spToPx(getResources().getDimensionPixelSize(R.dimen.text_size_primary)); // 标签页的文字大小,具体实现请参考下面的代码。
int textColorSecondary = Color.BLACK; // 标签页被选中时的字体颜色,具体实现请参考下面的代码。
int textSizeSecondary = spToPx(getResources().getDimensionPixelSize(R.dimen.text_size_secondary)); // 标签页被选中时的字体大小,具体实现请参考下面的代码。
int textColorUnselected = Color.BLACK; // 标签页未被选中时的字体颜色,具体实现请参考下面的代码。
int textSizeUnselected = spToPx(getResources().getDimensionPixelSize(R.dimen.text_size_unselected)); // 标签页未被选中时的字体大小,具体实现请参考下面的代码。
int textColorSelected = Color.WHITE; // 标签页被选中时的字体颜色,具体实现请参考下面的代码,注意,这里与textColorSecondary相同,是因为选中状态和未选中状态的颜色是一样的,这样可以简化代码,具体实现请参考下面的代码。
int textSizeSelected = spToPx(getResources().getDimensionPixelSize(R.dimen.text_size_selected)); // 标签页被选中时的字体大小,具体实现请参考下面的代码,注意,这里与textSizeSecondary相同,是因为选中状态和未选中状态的字体大小是一样的,这样可以简化代码,具体实现请参考下面的代码。
int textMarginPrimary = spToPx(getResources().getDimensionPixelSize(R.dimen.text_margin_primary)); // 标签页的文字外边距,具体实现请参考下面的 code,注意,这里与textMarginSecondary相同,是因为选中状态和未选中状态的文字外边距是一样的,这样可以简化代码,具体实现请参考下面的 code,注意,这里与textMarginUnselected相同,是因为选中状态和未选中状态的文字外边距是一样的,这样可以简化代码,具体实现请参考下面的 code,注意,这里与textMarginSelected相同,是因为选中状态和未选中状态的文字外边距是一样的,这样可以简化代码,具体实现请参考下面的 code,注意,这里与textMarginUnselected相同,是因为选中状态和未选中状态的文字外边距是一样的,这样可以简化代码,具体实现请参考下面的 code,注意,这里与textMarginSelected相同,是因为选中状态和未选中状态的文字外边距是一样的,这样可以简化代码,具体实现请参考下面的 code,注意,这里与textMarginUnselected相同,是因为选中状态和未选中状态的文字外边距是一样的,这样可以简化代码,具体实现请参考下面的 code,注意,这里与textMarginSelected相同,是因为选中状态和未选中状态的文字外边距是一样的,这样可以简化代码,具体实现请参考下面的 code,注意,这里与textMarginUnselected相同,是因为选中状态和未选中 state