我正在尝试使用设计库中的 BottomNavigationView。一切正常,除了我希望每个导航项启动一个活动,因此我想取消选中导航中的所有项目,使它们看起来相同。我尝试了几种解决方案,其中大多数都不起作用,最后一个确实有效,但感觉很hacky。
首先我这样做:
ViewGroup nav = (ViewGroup) bottomNav;
for(int i=0; i < nav.getChildCount(); i++) {
nav.getChildAt(i).setSelected(false);
}
这似乎什么也没做。
然后我尝试了:
int size = bottomNav.getMenu().size();
for (int i = 0; i < size; i++) {
bottomNav.getMenu().getItem(i).setChecked(false);
}
这只检查了最后一项而不是第一项。
最后我尝试在菜单中添加一个虚拟项目并执行以下操作:
bottomNav.getMenu().findItem(R.id.dummmy_item).setChecked(true);
bottomNav.findViewById(R.id.dummmy_item).setVisibility(View.GONE);
这几乎可以工作,但它隐藏了下面的标题,这对我的情况很重要。
然后我找到了这个答案:https ://stackoverflow.com/a/41372325/4888701并编辑了我上面的解决方案以包含它。具体来说,我添加了 proguard 规则,并使用了该确切的帮助程序类并调用了该方法。它看起来正确,似乎有效。但这对我来说感觉很hacky,因为:
- 我正在使用一个虚拟菜单项来允许检查任何可见项目
- 它为应该是一个小的视觉修复添加了相当多的代码。
- 我之前读过,如果可能的话,应该避免反思。
有没有其他的,最好是更简单的方法来实现这一点,或者这是我们当前版本的库中最好的?
(作为旁注,我想知道这个解决方案中的 proguard 规则是否必要以及它的作用?我对 proguard 真的一无所知,但这个项目是从启用它的其他人那里继承的。)