Android使用BottomNavigationView实现底栏分页式标签

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hzy199772/article/details/89310527

现在正在做毕业设计,今天功能写的比较快,所以抽时间把这个BottomNavigationView的使用写成文章记录下来。

话不多说,直接开始写步骤。

1.准备分页的Fragment

我这里是分的三个页面,所以有三个Fragment

(1)FragOrder

public class FragOrder extends Fragment {
    private static final String requestUrl="http://10.0.2.2:8080/gxLazierService";//请求地址

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view =inflater.inflate(R.layout.frag_order,container,false);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }
}

(2)FragFood

public class FragFood extends Fragment {

    private static final String requestUrl="http://10.0.2.2:8080/gxLazierService";//请求地址

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frag_food,container,false);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }
}

(3)FragPerson

public class FragPerson extends Fragment {
    private static final String requestUrl="http://10.0.2.2:8080/gxLazierService";//请求地址

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frag_person,container,false);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }
}

可以看到这三个类都继承了 Fragment 然后在onCreatView中加载对应的布局,然后他们通过onActivityCreated方法中和正常的Activity执行相同的代码逻辑。

2.布局文件

首先是三个Fragment的xml frag_order.xml、frag_food.xml、frag_person.xml

<?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">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="order"/>

</LinearLayout>
<?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">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="food"/>

</LinearLayout>
<?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">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="person"/>

</LinearLayout>

3.新建承载Fragment的Activity ----IndexActivity

public class IndexActivity extends AppCompatActivity {
    private BottomNavigationView bottomNavigationView;
    private FragOrder fragOrder;
    private FragFood fragFood;
    private FragPerson fragPerson;
    private Fragment[] fragments;
    private int lastfragment;//用于记录上个选择的Fragment

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStatusBarWhite();
        setContentView(R.layout.activity_index);
        ActionBar actionBar = getSupportActionBar();
        actionBar.hide();
        initFragment();
    }

    //初始化fragment和fragment数组
    private void initFragment() {
        fragOrder = new FragOrder();
        fragFood = new FragFood();
        fragPerson = new FragPerson();
        fragments = new Fragment[]{fragOrder, fragFood, fragPerson};
        lastfragment = 0;
        getSupportFragmentManager().beginTransaction().replace(R.id.mainview, fragOrder).show(fragOrder).commit();
        bottomNavigationView = (BottomNavigationView) findViewById(R.id.navigation);
        bottomNavigationView.setOnNavigationItemSelectedListener(changeFragment);
    }

    //判断选择的菜单
    private BottomNavigationView.OnNavigationItemSelectedListener changeFragment = new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {

            switch (item.getItemId()) {
                case R.id.nav_order: {
                    if (lastfragment != 0) {
                        switchFragment(lastfragment, 0);
                        lastfragment = 0;
                    }
                    return true;
                }
                case R.id.nav_food: {
                    if (lastfragment != 1) {
                        switchFragment(lastfragment, 1);
                        lastfragment = 1;
                    }
                    return true;
                }
                case R.id.nav_person: {
                    if (lastfragment != 2) {
                        switchFragment(lastfragment, 2);
                        lastfragment = 2;
                    }
                    return true;
                }
            }
            return false;
        }
    };

    //切换Fragment
    private void switchFragment(int lastfragment, int index) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.hide(fragments[lastfragment]);//隐藏上个Fragment
        if (fragments[index].isAdded() == false) {
            transaction.add(R.id.mainview, fragments[index]);


        }
        transaction.show(fragments[index]).commitAllowingStateLoss();


    }

    private void setStatusBarWhite() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = getWindow();
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
                    | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.TRANSPARENT);
        }
    }
}

以及布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.IndexActivity">

    <LinearLayout
        android:id="@+id/mainview"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">
    </LinearLayout>

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/navigation"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="5"
        app:menu="@menu/nav_menu">

    </android.support.design.widget.BottomNavigationView>


</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/nav_order"
        android:title="订单"
        android:icon="@drawable/list_unpress"
        />
    <item
        android:id="@+id/nav_food"
        android:title="菜品"
        android:icon="@drawable/order_unpress"
        />
    <item
        android:id="@+id/nav_person"
        android:title="我的"
        android:icon="@drawable/person_unpress"
        />

</menu>

主要的IndexActivity中的逻辑就是注册三个Fragment并提交默认显示,再设置监听做出对应展示页面的动作

对于setStatusBarWhite方法是设置状态栏为白色的 用不到可以删除。

猜你喜欢

转载自blog.csdn.net/hzy199772/article/details/89310527