我将新的底部导航视图从材质设计库添加到项目中,我希望默认情况下没有预先选择的项目。
现在默认选择第一项。
我用过
mBottomNavigation.getMenu().getItem(0).setChecked(false);
但默认情况下,当在for循环中为所有菜单项执行时,最后一项再次被选中。
我们有办法实现这个目标吗?
答案 0 :(得分:5)
不确定实现这一目标的正确方法,但解决方法会有所帮助 -
setCheckable(false)
navigation.getMenu().getItem(0).setCheckable(false);
item.setCheckable(true) inside onNavigationItemSelected()
public boolean onNavigationItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
item.setCheckable(true);
mTextMessage.setText(R.string.title_home);
return true;
}
return false;
}
答案 1 :(得分:2)
XML代码
<group android:checkableBehavior="single">
<item android:id="@+id/nav_item1" />
<item android:id="@+id/nav_item2" />
<item android:id="@+id/nav_item3" />
<item android:id="@+id/nav_item4" />
<item
android:id="@+id/nav_item5"
android:icon="@drawable/icon_item5"
android:title="Home"
android:visible="false"/>
</group>
JAVA代码
bottomNavigationView.getMenu().getItem(4).setChecked(true);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.nav_item1:
return true;
case R.id.nav_item2:
return true;
case R.id.nav_item3:
return true;
case R.id.nav_item4:
return true;
}
// Default operation you want to perform
return false;
}
});
答案 2 :(得分:2)
我想出了另一种解决方案
例如,只需在menu.xml文件中再添加一项
这是我的 bottom_nav_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/navigation_home"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/home" />
<item
android:id="@+id/navigation_cart"
android:icon="@drawable/ic_shopping_cart_black_24dp"
android:title="@string/cart" />
<item
android:id="@+id/navigation_wishlist"
android:icon="@drawable/ic_favorite_border_black_24dp"
android:title="@string/wish_list" />
<item
android:id="@+id/navigation_account"
android:icon="@drawable/ic_person_black_24dp"
android:title="@string/account" />
<!-- Our invisible item -->
<item
android:id="@+id/invisible"
android:visible="false"
android:icon="@drawable/ic_person_black_24dp"
android:title="@string/account" />
</menu>
请注意,我已经在最后一个位置添加了该项目,并为其指定了ID invisible
,并将可见性设置为false。
现在,在活动中,像这样将所选项目ID设置为此ID
bottomNavMenu.setSelectedItemId(R.id.invisible);
谢谢
答案 3 :(得分:1)
在onCreate方法中添加此行
mBottomNavigation.setSelectedItemId("ID OF YOUR MENU ITEM");
答案 4 :(得分:1)
在行中使用setCheckable
而不是setChecked(false)
mBottomNavigation.getMenu().getItem(0).setCheckable(false);
对我有用。
答案 5 :(得分:0)
我创建了一个示例项目,默认情况下没有选中项目。只需确保您的代码中没有navigationView.setCheckedItem(R.id.id)
。
答案 6 :(得分:0)
如果对Kotlin解决方案感兴趣的人是我的:
//disable the preselected first item
//<navigation> is the bottom navigation view
navigation.menu.getItem(0).isCheckable=false
然后在选择侦听器中,确保向用户显示他选择的内容
BottomNavigationView.OnNavigationItemSelectedListener { item: MenuItem ->
when (item.itemId) {
R.id.option1 -> {
item.isCheckable=true //here is the magic
//notify the listener
return@OnNavigationItemSelectedListener true
}
R.id.option2 ->{
item.isCheckable=true
//notify the listener
return@OnNavigationItemSelectedListener true
}
R.id.option3 ->{
//go to forgot user fragment
item.isCheckable=true
//notify the listener
return@OnNavigationItemSelectedListener true
}
else -> false
}
}
最后,选择颜色,以便您可以在color
中轻松更改
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:color="@color/colorAccent" />
<item android:color="@color/colorPrimary" />
并将选择器添加到导航视图
app:itemIconTint="@color/navigation_colors"
app:itemTextColor="@color/navigation_colors"
现在,如果您需要更改颜色,只需更改选择器即可。
答案 7 :(得分:-1)
我结合@Ashish Kumar提到的解决方案并解决了我的查询和
private void customizeBottomBar() {
mBottomNavigation.getMenu().getItem(0)
.setIcon(ContextCompat.getDrawable(activity, R.drawable.ic_reserve_normal));
changeMenuItemCheckedStateColor(mBottomNavigation, getUnCheckedColor(), getUnCheckedColor());
}
/**
* Method to change the color state of bottom bar view
* @param bottomNavigationView - BottomNavigation view instance
* @param checkedColorHex int value of checked color code
* @param uncheckedColorHex int value of unchecked color code
*/
void changeMenuItemCheckedStateColor(BottomNavigationView bottomNavigationView,
int checkedColorHex, int uncheckedColorHex) {
int[][] states = new int[][]{
new int[]{-android.R.attr.state_checked}, // unchecked
new int[]{android.R.attr.state_checked}, // checked
};
int[] colors = new int[]{
uncheckedColorHex,
checkedColorHex
};
ColorStateList colorStateList = new ColorStateList(states, colors);
bottomNavigationView.setItemTextColor(colorStateList);
bottomNavigationView.setItemIconTintList(colorStateList);
}