版权声明:本文为博主原创文章,未经博主允许不得转载。 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方法是设置状态栏为白色的 用不到可以删除。