android底部导航栏切换方式有哪些
- 行业动态
- 2023-12-29
- 4903
Android底部导航栏的切换方式有很多种,其中一种是使用ViewPager+Fragment+RadioGroup的方式。这种方式每次点击我们都要重置所有TextView的状态,然后选中点击的TextView。
底部导航栏切换方式简介
底部导航栏(Bottom Navigation Bar)是一种常见的导航方式,它位于应用界面的底部,用户可以通过点击不同的标签来实现页面之间的切换,在Android开发中,底部导航栏的使用非常广泛,下面我们将详细介绍几种常见的底部导航栏切换方式。
使用ViewPager2实现底部导航栏切换
1、添加依赖
在项目的build.gradle文件中添加ViewPager2的依赖:
dependencies { implementation 'androidx.viewpager2:viewpager2:1.0.0' }
2、创建布局文件
在activity_main.xml布局文件中添加ViewPager2控件:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.viewpager2.widget.ViewPager2 android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
3、创建FragmentPagerAdapter和Fragment类
创建一个继承自FragmentStateAdapter的FragmentPagerAdapter类:
public class MainFragmentPagerAdapter extends FragmentStateAdapter { private List<Fragment> fragmentList; private List<String> fragmentTitleList; public MainFragmentPagerAdapter(@NonNull FragmentManager manager, int resourceId, @NonNull List<Fragment> fragments, @NonNull List<String> 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
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:http://www.xixizhuji.com/fuzhu/275111.html