- 首先在app module中添加
implementation 'com.google.android.material:material:1.2.0' 这个版本添加角标,包括数字,类似QQ和微信的未读消息
- 主界面布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/vp_view_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav_view"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_60"
android:layout_gravity="bottom"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="@drawable/main_bottom_bg"
app:itemIconTint="@color/tab_text_color_selector"
app:itemTextColor="@color/tab_text_color_selector"
app:menu="@menu/main_bottom_nav_menu" />
</LinearLayout>
- MainPagerAdapter (Fragment适配器)
public class MainPagerAdapter extends FragmentStateAdapter {
private List<Fragment> mFragments;
public MainPagerAdapter(@NonNull FragmentActivity fragmentActivity, List<Fragment> fragments) {
super(fragmentActivity);
mFragments = fragments;
}
@NonNull
@Override
public Fragment createFragment(int position) {
return mFragments.get(position);
}
@Override
public int getItemCount() {
return mFragments.size();
}
}
- Activity代码设置
public class MainActivity extends BaseActivity implements ILaunchCallback {
@BindView(R.id.vp_view_container)
ViewPager2 mViewPager2;
@BindView(R.id.bottom_nav_view)
BottomNavigationView mBottomNavView;
private MainPagerAdapter mMainPagerAdapter;
private final List<Fragment> mListFragment = new ArrayList<>();
String[] PERMS = {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
};
private ActivityResultLauncher<Intent> mSettingsLauncher = registerForActivityResult(new StartActivityForResult(), result -> {
doPermission();
});
private ActivityResultLauncher mMultiRequestPermission = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
@Override
public void onActivityResult(Map<String, Boolean> result) {
for (Map.Entry<String, Boolean> entry : result.entrySet()) {
boolean value = entry.getValue();
String key = entry.getKey();
if (!value) {
mSingleRequestPermission.launch(key);
break;
}
}
}
});
private ActivityResultLauncher mSingleRequestPermission = registerForActivityResult(new ActivityResultContracts.RequestPermission(), result -> {
if (!result) {
AppUtil.showTipsDialog(MainActivity.this, MainActivity.this);
}
});
private void doPermission() {
mMultiRequestPermission.launch(PERMS);
}
@Override
protected int setLayoutId() {
return R.layout.app_bar_main;
}
@Override
public void initData() {
mListFragment.add(new FragmentSetting());
mListFragment.add(new FragmentTask());
mListFragment.add(new FragmentDevice());
mMainPagerAdapter = new MainPagerAdapter(this, mListFragment);
mViewPager2.setAdapter(mMainPagerAdapter);
mViewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
mBottomNavView.getMenu().getItem(position).setChecked(true);
disableLongTouch();
}
});
BottomNavigationView.OnNavigationItemSelectedListener onNavigationItemSelectedListener
= item -> {
switch (item.getItemId()) {
case R.id.navigation_first:
mViewPager2.setCurrentItem(0, false);
return true;
case R.id.navigation_second:
mViewPager2.setCurrentItem(1, false);
return true;
case R.id.navigation_third:
mViewPager2.setCurrentItem(2, false);
return true;
default:
break;
}
return false;
};
mBottomNavView.setOnNavigationItemSelectedListener(onNavigationItemSelectedListener);
// mBottomNavView.getOrCreateBadge(R.id.navigation_first).setNumber(11);
disableLongTouch();
}
@Override
public void initView() {
doPermission();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
} else {
return false;
}
return true;
}
@Override
public void loadData() {
}
@Override
public void launch() {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
mSettingsLauncher.launch(intent);
}
/**
* disable bottomView long touch popup
*/
private void disableLongTouch() {
mBottomNavView.getChildAt(0).findViewById(R.id.navigation_first).setOnLongClickListener(v -> true);
mBottomNavView.getChildAt(0).findViewById(R.id.navigation_second).setOnLongClickListener(v -> true);
mBottomNavView.getChildAt(0).findViewById(R.id.navigation_third).setOnLongClickListener(v -> true);
}
}
- 问题
这个版本长按某一项的话会弹出popup窗口,经搜索和查找源代码,这样做能够去掉它,请搜索上述代码中的下面语句!
disableLongTouch
- 总结 在遇到问题的时候,可以快速通过搜索来解决问题,因为大家可能也遇见过这样的问题。如果没有合适的解决方案,可以通过查找代码来分析,实现自己的目标。
如果暂时不能给出解决方案的时候,可以放一放,在自己时间比较充裕的时候去做,这样好多问题就能够迎刃而解!
祝愿大家新年快乐,万事如意,工作顺利,恭喜发财,身体健康!!!
祝愿大家新年快乐,万事如意,工作顺利,恭喜发财,身体健康!!!
祝愿大家新年快乐,万事如意,工作顺利,恭喜发财,身体健康!!!