BottomNavigationView始终显示图标和文本标签
我从设计支持库版本25使用android.support.design.widget.BottomNavigationView
compile 'com.android.support:design:25.0.0'
当在@ menu / bottom_navigation_main中只有三个动作时,它总是显示图标和文本标签。
当有三个以上的动作时,一直显示图标和文字标签的方法是什么?
25版很难。
试试这个代码。 但我认为这不是一个好的解决方案。
BottomNavigationView navigationView = (BottomNavigationView) findViewById(R.id.bottomBar); BottomNavigationMenuView menuView = (BottomNavigationMenuView) navigationView.getChildAt(0); for (int i = 0; i < menuView.getChildCount(); i++) { BottomNavigationItemView itemView = (BottomNavigationItemView) menuView.getChildAt(i); itemView.setShiftingMode(false); itemView.setChecked(false); }
在BottomNavigationView类中有一个BottomNavigationMenuView字段,在BottomNavigationMenuView中有一个BottomNavigationItemView []字段,它是底部栏中的项目。
说n是项目的数量,BottomNavigationMenuView将调用BottomNavigationItemView []数组的每个成员BottomNavigationItemView.setShiftingMode(n> 3)。 此function决定行为(总是显示标题或仅在选择时显示标题)。
所以总是显示标题的方法是尝试调用此方法,并且可以使用reflection来访问专用字段。
BottomNavigationView bottomNavigationView= (BottomNavigationView) findViewById(R.id.bottom_navigation); // get the private BottomNavigationMenuView field Field f = null; try { f = bottomNavigationView.getClass().getDeclaredField("mMenuView"); } catch (NoSuchFieldException e) { e.printStackTrace(); } f.setAccessible(true); BottomNavigationMenuView menuView=null; try { menuView = (BottomNavigationMenuView) f.get(bottomNavigationView); } catch (IllegalAccessException e) { e.printStackTrace(); } // get the private BottomNavigationItemView[] field try { f=menuView.getClass().getDeclaredField("mButtons"); } catch (NoSuchFieldException e) { e.printStackTrace(); } f.setAccessible(true); BottomNavigationItemView[] mButtons=null; try { mButtons = (BottomNavigationItemView[]) f.get(menuView); } catch (IllegalAccessException e) { e.printStackTrace(); } for(int i=0;i
你想要这个效果吗?
如果是这样,我建议你尝试BottomNavigationViewEx 。
我有一些与BottomNavigationView怪异的行为。 当我在其中选择任何项目/片段时,片段将BottomNavigationView降低一些,因此BottomNavigationView的文本会在屏幕下方显示,因此只有图标可见,并且在单击任何项目时文本都会隐藏。
如果你面对那种怪异的行为,那么这就是解决方案。 只要删除
android:fitsSystemWindows="true"
在你的根布局的片段。 只要删除这个和繁荣! BottomNavigationView将正常工作,现在可以显示文本和图标。 我有我的根本CoordinatorLayout片段。
另外不要忘记添加
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
在您的活动禁用移位模式。
这是这个class级:
public class BottomNavigationViewHelper { @SuppressLint("RestrictedApi") public static void removeShiftMode(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); item.setShiftingMode(false); // set once again checked value, so view will be updated item.setChecked(item.getItemData().isChecked()); } } catch (NoSuchFieldException e) { Log.e("ERROR NO SUCH FIELD", "Unable to get shift mode field"); } catch (IllegalAccessException e) { Log.e("ERROR ILLEGAL ALG", "Unable to change value of shift mode"); } }
}
一路显示标题。 试试这个Kotlin代码:
@SuppressLint("RestrictedApi") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_ofree) navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) val menuView = navigation.getChildAt(0) as BottomNavigationMenuView for (i in 0 until menuView.childCount) { val itemView = menuView.getChildAt(i) as BottomNavigationItemView itemView.setShiftingMode(false) itemView.setChecked(false) } }
BottomNavigationViewEx替代BottomBar
- Android – Kotlin:异步乐趣中的返回值
- 不能在androidTest中使用Kotlin反向方法名称 – 描述符错误异常
- 在MapBox Android中检测完整的运动结束
- findViewById()的更好的代码结构
- 如何使用kotlin创建在构造函数中传递方法引用的generics类的实例
- Lint认为Kotlin MutableMap.forEach()是java.util.Map.forEach()
- 静态类型语言的生命周期方法
- 我有一个错误:setOnItemClickListener不能用于微调,什么是错的?
- 使用Android数据绑定在Kotlin中初始化RecyclerView会引发错误。 我究竟做错了什么?