【问题标题】:How to remove title from bottom navigation如何从底部导航中删除标题
【发布时间】:2018-12-17 13:55:48
【问题描述】:

我查看了stackoverflow,找到了关于如何从默认bottom navigation. 中删除动画的解决方案

现在我需要从底部导航中删除标题。我在底部导航 xml 文件的标题中设置了空字符串,但它不会改变图像的位置。 我正在使用 v27

删除文本后,我需要将图像居中在 bottom navigation. 中。

这是我的代码。

 //OnCreate 

        BottomNavigationViewHelper.removeShiftMode(bottomNavigationView);

MainActivity 中的静态类

public static 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);
                //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("BottomNav", "Unable to get shift mode field", e);
        } catch (IllegalAccessException e) {
            Log.e("BottomNav", "Unable to change value of shift mode", e);
        }
    }
}

【问题讨论】:

    标签: java android android-layout android-fragments android-intent


    【解决方案1】:

    您可以尝试将 app:labelVisibilityMode 添加到“未标记”

     <android.support.design.widget.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:labelVisibilityMode="unlabeled"/>
    

    【讨论】:

    【解决方案2】:

    我使用以下代码的变体来自定义 BottomNavigationView 的标签,它们本质上是 TextView:

    private void removeBottomNavigationLabels(BottomNavigationView bottomNavigationView) {
        for (int i = 0; i < bottomNavigationView.getChildCount(); i++) {
            View item = bottomNavigationView.getChildAt(i);
    
            if (item instanceof BottomNavigationMenuView) {
                BottomNavigationMenuView menu = (BottomNavigationMenuView) item;
    
                for (int j = 0; j < menu.getChildCount(); j++) {
                    View menuItem = menu.getChildAt(j);
    
                    View small = menuItem.findViewById(android.support.design.R.id.smallLabel);
                    if (small instanceof TextView) {
                        ((TextView) small).setVisibility(View.GONE);
                    }
                    View large = menuItem.findViewById(android.support.design.R.id.largeLabel);
                    if (large instanceof TextView) {
                        ((TextView) large).setVisibility(View.GONE);
                    }
                }
            }
        }
    
        BottomNavigationMenuView menuView = (BottomNavigationMenuView) bottomNavigationView.getChildAt(0);
        for (int i = 0; i < menuView.getChildCount(); i++) {
            final View iconView = menuView.getChildAt(i).findViewById(android.support.design.R.id.icon);
            iconView.setPadding(0, 40, 0, 0);
            ViewGroup.LayoutParams layoutParams = iconView.getLayoutParams();
            DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
            layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, displayMetrics);
            layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, displayMetrics);
            iconView.setLayoutParams(layoutParams);
        }
    }
    

    你可以这样称呼它:

    removeBottomNavigationLabels(yourBottomNavigationView); 
    

    您也可以尝试类似地更改 TextView 的可见性、填充或高度。

    【讨论】:

    • 谢谢@forpas,这会删除文本,但图像仍然没有集中,我需要知道删除文本后在底部导航中集中图像的方法
    • @Kirmani88 我相信你的意思是垂直的。您是否也尝试将标签的高度设置为 0?
    • 是的,我希望它垂直居中,你能告诉我如何将标签高度设置为 0 吗?
    • 仍然没有垂直对齐:(
    • 检查我编辑的答案。您可以根据需要更改填充 (40) 和大小 (32) 的数字。
    【解决方案3】:

    尝试使用这些属性:

    showUnselectedLabels: false
    showSelectedLabels: false
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      相关资源
      最近更新 更多