android底部导航栏切换方式有哪些

Android底部导航栏的切换方式有很多种,其中一种是使用ViewPager+Fragment+RadioGroup的方式。这种方式每次点击我们都要重置所有TextView的状态,然后选中点击的TextView。

底部导航栏切换方式简介

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

使用ViewPager2实现底部导航栏切换

1、添加依赖

android底部导航栏切换方式有哪些

在项目的build.gradle文件中添加ViewPager2的依赖:

dependencies {
    implementation 'androidx.viewpager2:viewpager2:1.0.0'
}

2、创建布局文件

在activity_main.xml布局文件中添加ViewPager2控件:

android底部导航栏切换方式有哪些

<?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等。

android底部导航栏切换方式有哪些

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

原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/123303.html

(0)
酷盾叔的头像酷盾叔订阅
上一篇 2023-12-29 10:55
下一篇 2023-12-29 10:59

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入