0
点赞
收藏
分享

微信扫一扫

Android 练手完整项目app(一)创建底部导航菜单

这个项目是用于日常新手练习项目,没有相关​​UI设计​​,用于练习demo.写的较简单,后续会完善,不作为商用

Android 练手完整项目app(一)创建底部导航菜单_android

创建底部导航菜单,方式有很多种,本项目使用ViewPager+​​Fragment​​+BottomNavigationView形式,可侧滑

1.首页布局非常简单,ViewPaper+BottomNavigationView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
tools:context=".MainActivity">

<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />

<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/button_menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:labelVisibilityMode="labeled"
android:background="@color/white"
app:menu="@menu/nav_button"/>

<!-- app:labelVisibilityMode="labeled" 显示按钮标题-->
</LinearLayout>

Android 练手完整项目app(一)创建底部导航菜单_java_02

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/home"
android:icon="@drawable/sele_main_home"
android:title="主页"/>
<item
android:id="@+id/fun"
android:icon="@drawable/sele_main_fun"
android:title="功能"/>
<item
android:id="@+id/other"
android:icon="@drawable/sele_main_other"
android:title="其他"/>
<item
android:id="@+id/user"
android:icon="@drawable/sele_main_user"
android:title="我的"/>
</menu>

2.做好布局,准备4个Fragment,菜单底部导航设计了4个菜单,可在布局写个简单textView用于测试

public class OtherFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.frg_other, container, false);

return inflate;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
}

Android 练手完整项目app(一)创建底部导航菜单_java_03

3.创建ViewPaperAdater适配器

public class MainViewPaperAdater extends FragmentStatePagerAdapter{

private List<Fragment> fragmentList;

public MainViewPaperAdater(@NonNull FragmentManager fm, List<Fragment> fragmentList) {
super(fm);
this.fragmentList = fragmentList;
}

@NonNull
@Override
public Fragment getItem(int position) {
return fragmentList==null?null:fragmentList.get(position);
}

@Override
public int getCount() {
return fragmentList.size();
}

}

4.初始化数据MainActivity,相关逻辑已写注释

public class MainActivity extends AppCompatActivity {

private ViewPager viewPager;
private BottomNavigationView btnNavView;

private MainViewPaperAdater myFragmentStateVPAdapter;
private List<Fragment> fragmentList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//获取控件实例
viewPager = findViewById(R.id.viewpager);
btnNavView = findViewById(R.id.button_menu);
btnNavView.setItemIconTintList(null);//除去自带着色效果,没有这一行图标默认选中是紫色的。
btnNavView.setItemTextColor(ColorStateList.valueOf(getResources().getColor(R.color.black)));
//初始化数据
initData();
//创建myFragmentStateVPAdapter实例
myFragmentStateVPAdapter = new MainViewPaperAdater(getSupportFragmentManager(), fragmentList);
//绑定Adapter和ViewPager
viewPager.setAdapter(myFragmentStateVPAdapter);
//viewpager事件监听
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
// 在这个方法中和导航栏的按钮绑定,fragment页面的改变,导航栏按钮跟随变化
onPagerSelected(position);
}

@Override
public void onPageScrollStateChanged(int state) {

}
});

// BottomNavigationView的事件监听
btnNavView.setOnNavigationItemSelectedListener(item -> {
switch (item.getItemId()) {
case R.id.home:
viewPager.setCurrentItem(0);//选中第1个Fragment
break;
case R.id.fun:
viewPager.setCurrentItem(1);
break;
case R.id.other:
viewPager.setCurrentItem(2);
break;
case R.id.user:
viewPager.setCurrentItem(3);
break;
default:
break;
}
//记得返回true,响应变化
return true;
});
// 创建Badge
// BadgeDrawable badge=btnNavView.getOrCreateBadge(R.id.home);
// badge.setNumber(999);
// badge.setMaxCharacterCount(3);//设置最多显示2个字符
}

private void onPagerSelected(int position) {
switch (position) {
case 0:
btnNavView.removeBadge(R.id.home);
btnNavView.setSelectedItemId(R.id.home);
break;
case 1:
btnNavView.removeBadge(R.id.fun);
btnNavView.setSelectedItemId(R.id.fun);
break;
case 2:
btnNavView.removeBadge(R.id.other);
btnNavView.setSelectedItemId(R.id.other);
break;
case 3:
btnNavView.removeBadge(R.id.user);
btnNavView.setSelectedItemId(R.id.user);
break;
default:
break;
}
}

private void initData() {
fragmentList = new ArrayList<>();
fragmentList.add(new HomeFragment());
fragmentList.add(new FunctionFragment());
fragmentList.add(new OtherFragment());
fragmentList.add(new UserFragment());
}
}


举报

相关推荐

0 条评论