BottomNavigationView不显示非活动菜单标题。
如何在BottomNavigationBar中显示所有菜单元素的标题?问题是在我的例子中只显示了被点击的元素的标题。
BottomNavigationView
的实现有一个条件:当项目数超过3个时,使用shift模式。
此时,您无法通过现有API对其进行更改,禁用shift模式的唯一方法是使用反射。
您将需要helper类:
import android.support.design.internal.BottomNavigationItemView;
import android.support.design.internal.BottomNavigationMenuView;
import android.support.design.widget.BottomNavigationView;
import android.util.Log;
import java.lang.reflect.Field;
public class BottomNavigationViewHelper {
public static void disableShiftMode(BottomNavigationView view) {
BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
try {
Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode");
shiftingMode.setAccessible(true);
shiftingMode.setBoolean(menuView, false);
shiftingMode.setAccessible(false);
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
//noinspection RestrictedApi
item.setShiftingMode(false);
// set once again checked value, so view will be updated
//noinspection RestrictedApi
item.setChecked(item.getItemData().isChecked());
}
} catch (NoSuchFieldException e) {
Log.e("BNVHelper", "Unable to get shift mode field", e);
} catch (IllegalAccessException e) {
Log.e("BNVHelper", "Unable to change value of shift mode", e);
}
}
}
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation_bar);
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
您还需要更新proguard配置文件(例如,proGuard-rules.pro),上面的代码使用反射,如果proguard混淆mshiftingmode
字段,则不能工作。
-keepclassmembers class android.support.design.internal.BottomNavigationMenuView {
boolean mShiftingMode;
}
感谢Muhammad Alfaifi指出这个问题并提供片段。
更新2
<com.google.android.material.bottomnavigation.BottomNavigationView
...
app:labelVisibilityMode="labeled"
...
/>
我有这个方法: 我试着用这个方法颠倒过来: 这样调用这些方法: 结果: 我感兴趣的结果最终得到的值为FFFFFFB6;我需要FFFFFFB2。 setParameters方法不起作用,为什么?
本文向大家介绍如何禁用移动的选择高亮?相关面试题,主要包含被问及如何禁用移动的选择高亮?时的应答技巧和注意事项,需要的朋友参考一下
我需要帮助组合ViewPager和BottomNavigationView。但当我在ViewPager工作时滑动屏幕时,该片段会与另一个片段堆叠在一起。我怎么解决这个? 堆叠碎片 扫描前的正常片段 下面是我的代码: mainactivity.java activity_main.xml ViewPagerAdapter.java 提前道谢!
我正在将一个服务从Flask迁移到FastAPI,并使用Pydantic模型来生成文档。但是,我对模式检查有点不确定。我担心会有一些意想不到的数据(如不同的字段格式),它会返回一个错误。 在Pydantic文档中,有一些方法可以在不检查模式的情况下创建模型:https://Pydantic-docs . help manual . io/usage/models/# creating-models
我正在做Liferay 6.2项目。在Liferay中,他们使用了Vaadin。当我点击一个按钮时,它会打开一个不同的iframe。我可以为所有功能编写代码。现在我想使用WebDriver将光标移动到iframe元素。因为当我将鼠标移动到iframe复选框之后,我的自动脚本就可以运行了。我想自动化一个脚本,将鼠标指针移动到元素。 我已经尝试了下面的代码,但它不起作用。 1) 使用动作移动元素: 2
我想从Android谷歌地图V2中删除蓝色精确圆圈。 我找到了移除圆圈和标记的方法,并添加了新的标记,但对我来说,这似乎不酷。我只想办法禁用那个圆圈。