在我的情况下,我想要在授权片段中隐藏工具栏文本和BottomNavigationView项目的图标/标题,该片段处理应用程序的初始加载。当它确定用户已通过身份验证并从数据库获取其个人资料时,我会加载Feed片段,该片段从数据库获取数据并将其显示给用户。我所做的是向创建布局元素的活动添加以下方法,并从其片段调用它,传递一个布尔值以确定项目的可见性。
public void setBottomNavigationViewItemsVisibility(boolean value) {
if (this.bottomNavigationView != null) {
this.bottomNavigationView.setVisibility(View.VISIBLE);
Menu menu = this.bottomNavigationView.getMenu();
if (value) {
int[] icons = {R.drawable.ic_event_white_24dp, R.drawable.ic_explore,
R.drawable.ic_store_white_24dp, R.drawable.ic_notifications_white_24dp};
int[] titles = {R.string.feed, R.string.explore, R.string.finder, R.string.notifications};
for (int i = 0; i < menu.size(); i++) {
menu.getItem(i).setIcon(icons[i]);
menu.getItem(i).setTitle(titles[i]);
menu.getItem(i).setEnabled(true);
}
} else {
for (int i = 0; i < menu.size(); i++) {
menu.getItem(i).setIcon(R.drawable.ic_empty);
menu.getItem(i).setTitle(R.string.title_empty);
menu.getItem(i).setEnabled(false);
}
}
}
}
我们声明了一个可绘制ID数组和一个标题ID数组,以匹配我们在菜单XML文件中声明的内容。如果为真,则迭代菜单项并将它们的图标、标题和状态设置为默认值。如果为假,则将图标设置为透明图标(移除图标会影响其大小),将工具栏标题设置为空字符串并禁用它。
BottomNavigationView 菜单:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottom_navigation_view_home">
<item
android:id="@+id/action_feed"
android:enabled="true"
android:icon="@drawable/ic_event_white_24dp"
android:title="@string/feed"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_explore"
android:enabled="true"
android:icon="@drawable/ic_explore"
android:title="@string/explore"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_finder"
android:enabled="true"
android:icon="@drawable/ic_store_white_24dp"
android:title="@string/finder"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_notifications"
android:enabled="true"
android:icon="@drawable/ic_notifications_white_24dp"
android:title="@string/notifications"
app:showAsAction="ifRoom" />
</menu>
空图标 (ic_empty.xml):
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#00FFFFFF"
android:pathData="M8" />
</vector>
空标题(title_empty):
<string name="title_empty" />