在支持库28.0.0中禁用BottomNavigationView的ShiftNode

时间:2018-10-15 11:58:44

标签: android user-interface bottomnavigationview

未将支持库升级到v-28.0.0 BottomNavigationView切换模式后。即使我正在使用app:labelVisibilityMode="labeled",但项目正在移动,并且项目文本在选择时被剪切。

以前,我是使用反射来做到这一点的。还有其他禁用变速模式的方法。

3 个答案:

答案 0 :(得分:0)

这可能会有所帮助(这是科特林):

@SuppressLint("RestrictedApi")
fun disableShiftMode(view: BottomNavigationView) {
    val menuView = view.getChildAt(0) as BottomNavigationMenuView
    try {
        val shiftingMode = menuView.javaClass.getDeclaredField("mShiftingMode")
        shiftingMode.isAccessible = true
        shiftingMode.setBoolean(menuView, false)
        shiftingMode.isAccessible = false
        for (i in 0 until menuView.childCount) {
            val item = menuView.getChildAt(i) as BottomNavigationItemView
            item.setShiftingMode(false)
            // set once again checked value, so view will be updated
            item.setChecked(item.itemData.isChecked)
        }
    } catch (e: NoSuchFieldException) {
        Log.e(TAG, "Unable to get shift mode field")
    } catch (e: IllegalAccessException) {
        Log.e(TAG, "Unable to change value of shift mode");
    }
}

答案 1 :(得分:0)

尝试将app:itemTextAppearanceActiveapp:itemTextAppearanceInactive设置为相同的textAppearance样式,或者将textSizefontFamily设置为相同的样式

答案 2 :(得分:0)

对我来说,在XML中启用具有match_parent宽度的转换模式

            app:labelVisibilityMode="selected"

禁用变速模式

            app:labelVisibilityMode="labeled"

&删除您的反射。我的照常工作。